{
 "cells": [
  {
   "cell_type": "code",
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2024-09-20T02:27:41.228633Z",
     "start_time": "2024-09-20T02:27:41.224473Z"
    }
   },
   "source": [
    "import os \n",
    "os.getcwd()\n"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'D:\\\\kaifaruanjian\\\\pyCharm\\\\pythonProobject\\\\shixunone\\\\longdan\\\\com\\\\bw\\\\shixun\\\\tianmao'"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 41
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:27:41.754645Z",
     "start_time": "2024-09-20T02:27:41.750751Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from collections import Counter\n",
    "from datetime import datetime\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "from scipy import stats\n",
    "import gc\n",
    "import warnings\n",
    "\n",
    "\n",
    "from pylab import mpl\n",
    "# 设置显示中文字体\n",
    "mpl.rcParams[\"font.sans-serif\"] = [\"SimHei\"]\n",
    "\n",
    "# 设置正常显示符号\n",
    "mpl.rcParams[\"axes.unicode_minus\"] = False\n",
    "warnings.filterwarnings('ignore')"
   ],
   "id": "64a41914a4ecbc2a",
   "outputs": [],
   "execution_count": 42
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:27:59.573208Z",
     "start_time": "2024-09-20T02:27:41.773588Z"
    }
   },
   "cell_type": "code",
   "source": [
    "test_data = pd.read_csv('../../../../data_format1/test_format1.csv')\n",
    "train_data = pd.read_csv('../../../../data_format1/train_format1.csv')\n",
    "\n",
    "user_info = pd.read_csv('../../../../data_format1/user_info_format1.csv')\n",
    "user_log = pd.read_csv('../../../../data_format1/user_log_format1.csv')"
   ],
   "id": "beb35eba6d6a74cf",
   "outputs": [],
   "execution_count": 43
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:27:59.583176Z",
     "start_time": "2024-09-20T02:27:59.574210Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# reduce memory\n",
    "def reduce_mem_usage(df, verbose=True):\n",
    "    # 算DataFrame中所有列的内存使用总量\n",
    "    start_mem = df.memory_usage().sum() / 1024**2\n",
    "    numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']\n",
    "\n",
    "    for col in df.columns:\n",
    "        col_type = df[col].dtypes\n",
    "        if col_type in numerics:\n",
    "            c_min = df[col].min()\n",
    "            c_max = df[col].max()\n",
    "            if str(col_type)[:3] == 'int':\n",
    "                if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:\n",
    "                    df[col] = df[col].astype(np.int8)\n",
    "                elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:\n",
    "                    df[col] = df[col].astype(np.int16)\n",
    "                elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:\n",
    "                    df[col] = df[col].astype(np.int32)\n",
    "                elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:\n",
    "                    df[col] = df[col].astype(np.int64)\n",
    "            else:\n",
    "# 如果列的最小值大于float16的最小值，并且最大值小于float16的最大值，则将该列转换为float16类型。float16是一种半精度浮点数类型，它占用的内存比标准的float32少。\n",
    "                if c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:\n",
    "                    df[col] = df[col].astype(np.float16)\n",
    "                elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:\n",
    "                    df[col] = df[col].astype(np.float32)\n",
    "                else:\n",
    "                    df[col] = df[col].astype(np.float64)\n",
    "               \n",
    "    end_mem = df.memory_usage().sum() / 1024**2\n",
    "    # 显示优化后的内存使用量。\n",
    "    print('Memory usage after optimization is: {:.2f} MB'.format(end_mem))\n",
    "    # 计算并显示内存使用量的减少百分比。\n",
    "    print('Decreased by {:.1f}%'.format(100 * (start_mem - end_mem) / start_mem))\n",
    "    return df"
   ],
   "id": "20c776faef8220fa",
   "outputs": [],
   "execution_count": 44
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:02.583751Z",
     "start_time": "2024-09-20T02:27:59.584176Z"
    }
   },
   "cell_type": "code",
   "source": [
    "train_data = reduce_mem_usage(train_data)\n",
    "test_data = reduce_mem_usage(test_data)\n",
    "\n",
    "user_info = reduce_mem_usage(user_info)\n",
    "user_log = reduce_mem_usage(user_log)"
   ],
   "id": "7d2f5e628b8a32ef",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Memory usage after optimization is: 1.74 MB\n",
      "Decreased by 70.8%\n",
      "Memory usage after optimization is: 3.49 MB\n",
      "Decreased by 41.7%\n",
      "Memory usage after optimization is: 3.24 MB\n",
      "Decreased by 66.7%\n",
      "Memory usage after optimization is: 890.48 MB\n",
      "Decreased by 69.6%\n"
     ]
    }
   ],
   "execution_count": 45
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:02.590314Z",
     "start_time": "2024-09-20T02:28:02.584749Z"
    }
   },
   "cell_type": "code",
   "source": "train_data.head()",
   "id": "4d0c7fdc4b515da4",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  merchant_id  label\n",
       "0    34176         3906      0\n",
       "1    34176          121      0\n",
       "2    34176         4356      1\n",
       "3    34176         2217      0\n",
       "4   230784         4818      0"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34176</td>\n",
       "      <td>3906</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34176</td>\n",
       "      <td>121</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34176</td>\n",
       "      <td>4356</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34176</td>\n",
       "      <td>2217</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>230784</td>\n",
       "      <td>4818</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 46
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:02.614432Z",
     "start_time": "2024-09-20T02:28:02.591313Z"
    }
   },
   "cell_type": "code",
   "source": "test_data.head()",
   "id": "1f63e2a9bef1a160",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  merchant_id  prob\n",
       "0   163968         4605   NaN\n",
       "1   360576         1581   NaN\n",
       "2    98688         1964   NaN\n",
       "3    98688         3645   NaN\n",
       "4   295296         3361   NaN"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>prob</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>163968</td>\n",
       "      <td>4605</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>360576</td>\n",
       "      <td>1581</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>98688</td>\n",
       "      <td>1964</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>98688</td>\n",
       "      <td>3645</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>295296</td>\n",
       "      <td>3361</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 47
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:02.643781Z",
     "start_time": "2024-09-20T02:28:02.614934Z"
    }
   },
   "cell_type": "code",
   "source": "user_info.head()",
   "id": "fc6bd45d093a95c5",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  age_range  gender\n",
       "0   376517        6.0     1.0\n",
       "1   234512        5.0     0.0\n",
       "2   344532        5.0     0.0\n",
       "3   186135        5.0     0.0\n",
       "4    30230        5.0     0.0"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>376517</td>\n",
       "      <td>6.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>234512</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>344532</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>186135</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>30230</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 48
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:02.664688Z",
     "start_time": "2024-09-20T02:28:02.644781Z"
    }
   },
   "cell_type": "code",
   "source": "user_log.head()",
   "id": "28d672e8d1eecb96",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  item_id  cat_id  seller_id  brand_id  time_stamp  action_type\n",
       "0   328862   323294     833       2882    2660.0         829            0\n",
       "1   328862   844400    1271       2882    2660.0         829            0\n",
       "2   328862   575153    1271       2882    2660.0         829            0\n",
       "3   328862   996875    1271       2882    2660.0         829            0\n",
       "4   328862  1086186    1271       1253    1049.0         829            0"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>cat_id</th>\n",
       "      <th>seller_id</th>\n",
       "      <th>brand_id</th>\n",
       "      <th>time_stamp</th>\n",
       "      <th>action_type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>328862</td>\n",
       "      <td>323294</td>\n",
       "      <td>833</td>\n",
       "      <td>2882</td>\n",
       "      <td>2660.0</td>\n",
       "      <td>829</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>328862</td>\n",
       "      <td>844400</td>\n",
       "      <td>1271</td>\n",
       "      <td>2882</td>\n",
       "      <td>2660.0</td>\n",
       "      <td>829</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>328862</td>\n",
       "      <td>575153</td>\n",
       "      <td>1271</td>\n",
       "      <td>2882</td>\n",
       "      <td>2660.0</td>\n",
       "      <td>829</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>328862</td>\n",
       "      <td>996875</td>\n",
       "      <td>1271</td>\n",
       "      <td>2882</td>\n",
       "      <td>2660.0</td>\n",
       "      <td>829</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>328862</td>\n",
       "      <td>1086186</td>\n",
       "      <td>1271</td>\n",
       "      <td>1253</td>\n",
       "      <td>1049.0</td>\n",
       "      <td>829</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 49
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "缺失值查看",
   "id": "b06354e7798b3a4a"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:02.691335Z",
     "start_time": "2024-09-20T02:28:02.665690Z"
    }
   },
   "cell_type": "code",
   "source": "train_data.isna().sum()",
   "id": "e46277a4385f356d",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "user_id        0\n",
       "merchant_id    0\n",
       "label          0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 50
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:02.733636Z",
     "start_time": "2024-09-20T02:28:02.692334Z"
    }
   },
   "cell_type": "code",
   "source": "test_data.isna().sum()",
   "id": "236434c1250d1c18",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "user_id             0\n",
       "merchant_id         0\n",
       "prob           261477\n",
       "dtype: int64"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 51
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:02.752742Z",
     "start_time": "2024-09-20T02:28:02.734634Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 查看每列缺失值比例\n",
    "user_info.isna().sum()/user_info.shape[0]"
   ],
   "id": "434cd54ff4fe50e0",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "user_id      0.000000\n",
       "age_range    0.005227\n",
       "gender       0.015173\n",
       "dtype: float64"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 52
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:03.161983Z",
     "start_time": "2024-09-20T02:28:02.753743Z"
    }
   },
   "cell_type": "code",
   "source": "user_log.isna().sum()/user_log.shape[0]",
   "id": "9a7555de1de1666f",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "user_id        0.000000\n",
       "item_id        0.000000\n",
       "cat_id         0.000000\n",
       "seller_id      0.000000\n",
       "brand_id       0.001657\n",
       "time_stamp     0.000000\n",
       "action_type    0.000000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 53
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "重复值查看",
   "id": "16ff4602786319c"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:03.186951Z",
     "start_time": "2024-09-20T02:28:03.162983Z"
    }
   },
   "cell_type": "code",
   "source": "train_data.duplicated().sum()",
   "id": "c3d5d4be51ca5396",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 54
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:03.214275Z",
     "start_time": "2024-09-20T02:28:03.187952Z"
    }
   },
   "cell_type": "code",
   "source": "test_data.duplicated().sum()",
   "id": "6f5b3ac88dad610b",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 55
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:03.280180Z",
     "start_time": "2024-09-20T02:28:03.216270Z"
    }
   },
   "cell_type": "code",
   "source": "user_info.duplicated().sum()",
   "id": "5091f8b2f5446bdf",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 56
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:18.948373Z",
     "start_time": "2024-09-20T02:28:03.281178Z"
    }
   },
   "cell_type": "code",
   "source": "user_log.duplicated().sum()",
   "id": "213f17e7134c0f37",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "13750198"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 57
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "可视化数据\n",
   "id": "ddc4c7c89ffb9c4c"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:19.411602Z",
     "start_time": "2024-09-20T02:28:18.949374Z"
    }
   },
   "cell_type": "code",
   "source": [
    "#正负样本比例分布\n",
    "label_gp = train_data.groupby('label')['user_id'].count()\n",
    "print('正负样本的数量：\\n',label_gp)\n",
    "_,axe = plt.subplots(1,2,figsize=(12,6))\n",
    "train_data.label.value_counts().plot(kind='pie',autopct='%1.1f%%',shadow=True,explode=[0,0.1],ax=axe[0])\n",
    "sns.countplot(x='label',data=train_data,ax=axe[1],)"
   ],
   "id": "3cf55d4fc1bb550d",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "正负样本的数量：\n",
      " label\n",
      "0    244912\n",
      "1     15952\n",
      "Name: user_id, dtype: int64\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Axes: xlabel='label', ylabel='count'>"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x600 with 2 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 58
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:19.676231Z",
     "start_time": "2024-09-20T02:28:19.412615Z"
    }
   },
   "cell_type": "code",
   "source": [
    "#购买次数前5的店铺\n",
    "print('选取top5店铺\\n店铺\\t购买次数')\n",
    "print(train_data.merchant_id.value_counts().head(5))\n",
    "train_data_merchant = train_data.copy()\n",
    "train_data_merchant['TOP5'] = train_data_merchant['merchant_id'].map(lambda x: 1 if x in [4044,3828,4173,1102,4976] else 0)\n",
    "train_data_merchant = train_data_merchant[train_data_merchant['TOP5']==1]\n",
    "plt.figure(figsize=(8,6))\n",
    "plt.title('Merchant VS Label')\n",
    "ax = sns.countplot(x = 'merchant_id',hue='label',data=train_data_merchant)\n",
    "for p in ax.patches:\n",
    "    height = p.get_height()"
   ],
   "id": "3b923689ed8b5ea7",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "选取top5店铺\n",
      "店铺\t购买次数\n",
      "4044    3379\n",
      "3828    3254\n",
      "4173    2542\n",
      "1102    2483\n",
      "4976    1925\n",
      "Name: merchant_id, dtype: int64\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 800x600 with 1 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAArcAAAIdCAYAAAAnGlX/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA9hklEQVR4nO3deXxU1f3/8ffMZCEECCAawLAKjIAhssSFpWyptqCshboUxQo1qPVRE0uJAgJBIVQpbuA3KlqLFlli3EBZvlbUIlKsGK1J6BiBIJsGAgmECZP5/cGP+TpCQmayzOTM6/l45PFg7rnn3s/NYSbv3Jx7r8XtdrsFAAAAGMAa6AIAAACA2kK4BQAAgDEItwAAADAG4RYAAADGINwCAADAGIRbAAAAGINwCwAAAGMQbgEAAGAMwi0AAACMQbgF0GBlZWXJbrcrOTnZs+yFF16Q3W7XjBkz6q2OSZMm6amnnqq3/fnjtttu05gxY85ZPmnSJI0bN87zeuvWrRo3bpx69eql66+/Xu+++26191FYWCi73a5Nmzb5XedTTz2lG264we/+P7Zt2zbZ7fZa2RaAhoNwC6DBy8vLO++/TfTUU0+psLDQ534DBw5UXl6eiouLPcucTqd27typAQMGSDrzvZs6daqGDBmi5557TgkJCUpNTdWePXtqrX4AqGuEWwAN3nfffadjx45JknJzcwNcTd16+umntW/fPp/7DRgwQBUVFdq+fbtn2eeff65Tp06pf//+ks6cCe/UqZPuu+8+XX311Zo/f76io6P15ptv1lr9AFDXCLcAGrRLL71UF198sfLy8lReXq5vvvlGCQkJgS4r6PTo0UMtW7bUp59+6ln26aefKioqSn379pUkHTlyRMePH9fp06clSREREXr++ec1cuTIgNQMAP4g3AJo8Ox2u/Ly8uRwOGSxWNShQwev9nXr1umGG25Qr169NGbMGG3dutWrfcaMGZoxY4YOHjyo1NRUXX311V5/inc6nVqwYIGuueYa9evXT3fdddd5/1S/Zs0aDRs2TH369FFqaqpOnTrlacvJydGtt96q3r17a9CgQXrsscfkdrsl/d9c1by8PE2fPl19+vTRz372M73++uuS/m/u6Nn5o7fddpvsdruGDRtW7e+RxWLRtdde63Xmdvv27erXr58iIiIkSYMHD9b+/ft11113adeuXZKkXr16qVOnTtXeT3W8+eabGjFihBISEvSLX/xCb7/99jnrPP3000pMTNTVV1+tJ554wvO9kqSTJ09q/vz5uvbaa5WYmKg//OEPKioqqtUaATRchFsADV63bt2Um5urvLw8denSRTabzdO2detWpaSk6Prrr9cLL7yghIQETZ06VQ6Hw2sbR48e1c033yyLxaLf//73atGihadt+vTpys7O1h//+Ec9+eSTOn78uKZMmaLy8nLPOps2bdJzzz2ntLQ0paWl6d1339Xq1aslSaWlpZoyZYoaNWqkzMxMTZ8+Xa+88oreeOMNrxqmT58ui8WiZ555Rv369dPs2bNVVFSknj17as2aNVqzZo0kae7cuVqzZo2WLVvm0/dpwIABys3N1bFjx+R0OvX555975ttK0siRI5WSkqJt27bpxhtvVEpKig4cOODTPi5kx44dmj59ugYPHqwXXnhBN954o/70pz9p7969nnUKCgr0/vvva/HixZoyZYr+53/+RytXrvS0P/zww9q0aZMefvhhPfbYY9q1a5fuvffeWq0TQMMVFugCAKCmunXrpldffVVNmzY95+r4pUuXatiwYfr9738vSerbt6/ee+89vfPOO7rvvvs8673//vuaMWOG7rjjDq/+BQUFWr9+vTIyMjx3G2jZsqWWLl2qH374Qa1bt5Ykffvtt3rvvfc8rzdu3OiZ/3vixAn94Q9/0LBhwxQbGyun06mXX35Zn3/+udcdDNq0aaOMjAxJZ85Gv/POOyooKFDfvn0VHx/vWa9Tp05er6vrx/NuY2JiVFZW5hVuJemuu+7S6NGjlZmZqVWrVunTTz/VihUr1LFjR5/3dz6NGjXSvHnzNH78eNlsNnXq1EnLli1TTk6O2rVrJ0lyuVxavHixOnTooEGDBik3N1d//etfdfPNN2vv3r1688039fTTTyspKcmz/rRp07R3717PNgCELsItgAavW7du2rVrl5o0aaJBgwYpPz/f05afn6+jR4+eE3p3797t9bpLly66/fbbz9n2119/LUnq16+fZ9nll1+uJ5980mu9pKQkT7CVzgTgs3NXL774Yg0cOFCrV6/Wv/71L+Xk5Ki0tFSXXXaZ1zZ+85vfePWX5NlGbWjdurUuu+wyffrpp2revLkuvvhidevW7bzrzZ49W6NGjdIdd9yhhQsX6tlnn62VGnr27KmysjJlZGTos88+U25urk6fPq2ysjLPOrGxsV5TS3r16qX33ntPLpdLu3btktvt1j333HPOtnfv3k24BUC4BdDwdenSRU6nU//85z915513eoVbSbrllls0ceJEr2VNmzb1eh0fHy+rtfKZWhaLxfNvt9utHTt2qEOHDrr44oslqcpQ9dVXX+mWW27R1Vdfreuuu06pqalasWLFOeu1b9++8oOsJQMGDPCE27N3SThr3LhxXvfDvfLKKzV27Nga3bf2p1555RUtWLBA48aN06RJk9SnT59zfqn46TjYbDa53W6vebfPP/+8WrVq5bUewRaAxJxbAAaIjIz0BMOfnqHt2rWrDh8+rO7du3u+Nm3apA8++KBa2+7evbskeV2IVVhYqFtvvVU5OTmeZT+e5/tTb7zxhlq2bKnMzEzdcsstuuKKK845cyydG+rOJyIiwussp6/Ozrvdvn37OVMSSkpKtG3bNq9lR48eVdu2bf3e30+tXr1aI0aM0Lx58zR69GhFR0fr6NGjXuscOHBA3333nef1l19+qbZt2yosLExdu3aVdOYiv7PjedFFF+mFF17w6xZpAMzDmVsARujWrZuOHj3qOZN61j333KM77rhDf/nLXzRw4EB99tlneuaZZ/TEE09Ua7udOnXSL37xCy1cuFAVFRVq3bq1li1bpvbt2+uaa66p1jZatGih77//XuvWrVN0dLT+9re/6d///rfi4uJ8Ps6EhAStXr1a0dHROnDggNq0aeO5lVd1XHXVVbLZbCovLz/nzO1NN92kxx57TB06dFDfvn312Wef6d1339Wf//xnn2rMzc1V48aNvZa1bt1anTt3VosWLbRz505t3bpVhw8f1tKlS1VaWiqXy+W1fkpKin7/+98rPz9fb7/9th544AFJZ87Ojh49WvPmzVNpaakuueQSZWZmateuXZozZ45PdQIwE+EWgBHOhtufuvbaa7V48WItXbpUy5cvV1xcnB599FFdf/311d72okWLtHjxYi1atEgul0uJiYl69NFHzwlwlbn99tu1a9cuzZw5U02bNtXgwYN10003aevWrT7PqU1PT9dDDz2kO+64Q02aNNHChQt96t+4cWP17t37vL8ITJ48WRaLRStXrtSzzz6rdu3a6ZFHHvH5PrfnexTxrbfeqtmzZ2vmzJmaNWuWpk2bptatW2vChAlat26dduzYoQkTJkiSLrvsMvXt21f33XefoqOjlZycrNtuu82zrblz5+rxxx/XggULVFZWpr59++qll15SkyZNfKoTgJks7h9PYgIAAAAaMObcAgAAwBiEWwAAABiDcAsAAABjEG4BAABgDMItAAAAjEG4BQAAgDFC/j63FRUVOn36tKxWq9fjNQEAABAc3G63KioqFBYWdsGnOYZ8uD19+rTXIzQBAAAQnOLj4xUREVHlOiEfbs+m//j4+CqfDQ8AAIDAcLlcysnJueBZW4lw65mKYLPZCLcAAABBrDpTSLmgDAAAAMYg3AIAAMAYhFsAAAAYI+Tn3AIAADQUbrdbp0+flsvlCnQptS48PLxWrn8i3AIAADQATqdT+/fv14kTJwJdSp2wWCyKi4tTkyZNarQdwi0AAECQq6ioUEFBgWw2m9q2bauIiAijHj7ldrt1+PBhFRYWqmvXrjU6g0u4BQAACHJOp1MVFRVq166dGjduHOhy6sTFF1+sb7/9VuXl5TUKt1xQBgAA0EBU5yEGDVVtnYk29zsEAACAkEO4BQAAgDEItwAAAAYrLCyU3W6v1rpZWVmaNGmS3/vatm2bhg0b5nf/2kC4BQAAgDEItwAAADAG4RYAACDE/Otf/9Lo0aOVkJCg8ePHKz8/39NWXl6ue++9V71799bUqVP1ww8/eNq++OILTZgwQX379tW9996r48ePB6L8KhFuAQAAQkhFRYXuu+8+/eIXv9CmTZvUu3dvLVq0yNP+73//W927d9ebb74pq9WqefPmSZKOHTumqVOnavDgwXrrrbd08uRJLVy4MFCHUSke4gAAABBi3njjDTVt2lR5eXkqLS3Vt99+62m7+OKLNW3aNFmtVt1777266aab5HK59P777ys8PFz33HOPLBaLJk+erOnTpwfuICpBuAUAAAghVqtVL774otasWaO4uDhdeumlqqio8LRfeumlnodFtG3bVqdPn9aRI0d08OBBFRUVKTExUdKZM8ClpaU6deqUIiMjA3Is50O4BQAACCHbtm3T3//+d23cuFGtWrXSBx98oK+++srTfuDAAbndblksFh08eFA2m03NmzdX69atdcUVV2jx4sWSJLfbrZKSEoWFBVecZM4tAABACDlx4oQk6fjx49qxY4cWLFggt9vtaT9w4ICef/55FRYW6plnntGQIUMUFhamIUOG6LvvvtMXX3whm82mdevWacqUKV59gwHhFgB+wvWjP881VCYcA4C6MWjQIA0bNkzjxo3TnDlzNHHiRB06dEjff/+9JCk+Pl47duzQ6NGjVVZWpjlz5kiSmjVrpqVLl+rFF1/UL3/5S23cuFHLli0LujO3Fnewxe165nK59Pnnn+vKK6+UzWYLdDkAgsTMVz9UwaHiQJfhl06XxGj+LYMCXQaAWlRWVqaCggJ16tRJjRo1CnQ5daKqY/QlrwVX1AaAIFFwqFi5+4oCXQYAwEdMSwAAAIAxCLcAAAAwBuEWAAAAxiDcAgAAwBiEWwAAABiDcAsAAABjEG4BAAAasPp+aEuwPySG+9wCAAA0YDartd4ePOPPQ2Ly8/OVlpamPXv26Fe/+pWmT58ui8VSRxUSbgEAABq8YH3wjNPpVHJysgYOHKi//OUvmj9/vrKysjR+/Pg62yfTEgAAAFAntmzZopKSEqWlpal9+/ZKSUnRmjVr6nSfhFsAAADUidzcXCUkJCgqKkqSZLfb5XA46nSfhFsAAADUiZKSEsXFxXleWywWWa1WFRfX3fxgwi0AAADqhM1mU0REhNeyyMhIlZWV1dk+CbcAAACoEzExMSoq8r7QrbS0VOHh4XW2T8ItAAAA6kR8fLx27tzpeV1YWCin06mYmJg62ye3AgMAAGjgOl1Sd2GxJvtJTEzU8ePHlZ2drTFjxigzM1P9+/eXzWarowoDGG6PHDmigoICdezYUS1btgxUGQAAAA2aq6LC5wcr1HR/Nmv1/vgfFham9PR0paamatGiRXK5XFqxYkWd1heQaQnvvPOOrrvuOs2bN09Dhw7VO++8I+nMEyzGjx+vxMREZWRkyO12e/r42wYAAGCy6gbNQO0vKSlJGzZs0Lx587R+/Xp17dq1jio7o97D7bFjx5Senq5XXnlF2dnZmjt3rh577DHPEyx69uyptWvXyuFwKCsrS5L8bgMAAEDgxcbGKikpqV7+Wl/v0xJKS0v14IMPqlu3bpKkyy+/XMXFxV5PsIiKilJKSormzp2r8ePH+93mC5fLVReHC6ABqsu5YPWJzzXAHC6XS2632/NlorPH5nK5zvn88uXzrN7DbZs2bTRq1ChJUnl5uZYvX67rrruuyidY+Nvmi5ycnBofG4CGLyoqSj169Ah0GbUiLy9PJ0+eDHQZAGpJWFiYTp48qYqKikCXUidOnTql8vJy5ebm1mg7AbugLDc3V7fddpvCw8O1fv16LV26tNInWFT1dIuq2ny5zUR8fLwxZ2sAQDrzyz4AM5SVlWn37t2KiopSo0aNAl1OnbBarQoPD1eXLl3OOUaXy1XtE5EBC7d2u10vvfSSMjIylJaWpo4dO1b6BIuqnm5RVZsv4dZmsxFuARiFzzTAHDabTRaLxfNlorPHVtNMFrCHOFgsFvXo0UMLFy7U5s2bq3yChb9tAAAACC31Hm63bt2qjIwMz+uzybxz586VPsGiqqdbBOLJFwAAAAhO9R5uO3furNdee02vvfaa9u/fr8cff1wDBgzQkCFDPE+wkOT1BIsfP93ClzYAAADTuSvq984o9b0/X9X7nNvY2Fg98cQTWrBggTIyMjRw4ED9+c9/rvIJFv62AQAAmM5iten7rBkq//6bOt9XeKvOajVuoc/9jhw5ovHjx+vll1/2uhFAXQjIBWWDBg3SoEHnPibu7BMscnJy1KdPH68b/frbBgAAYLry779R+YGvA13GeRUVFWnatGnat29fvewvYHdLqExsbKxiY2NrtQ0AAACBkZKSohEjRujzzz+vl/0F7G4JAAAAMF96erpuv/32etsf4RYAAAB1pl27dvW6P8ItAAAAjEG4BQAAgDEItwAAADBG0N0tAQAAAL4Jb9XZqP3UBOEWAACgAXNXuPx6sEJN9mexBu+TYAm3AAAADVh9B01/95eXl1fLlZwfc24BAABgDMItAAAAjEG4BQAAgDEItwAAAA2E2+0OdAl1praOjXALAAAQ5MLDwyVJJ06cCHAldcfpdEqSbLaaXSDH3RKAanBVVMhmbdi/C5pwDAAQqmw2m5o3b65Dhw5Jkho3biyLxRLgqmpPRUWFDh8+rMaNGyssrGbxlHALVIPNatXMVz9UwaHiQJfil06XxGj+LYMCXQYAoAZat24tSZ6Aaxqr1ar27dvXOLQTboFqKjhUrNx9RYEuAwAQoiwWi9q0aaNLLrlE5eXlgS6n1kVERMhaC39hJNwCAAA0IDabrcbzUk3GBDwAAAAYg3ALAAAAYxBuAQAAYAzCLQAAAIxBuAUAAIAxCLcAAAAwBuEWAAAAxiDcAgAAwBiEWwAAABiDcAsAAABjEG4BAABgDMItAAAAjEG4BQAAgDEItwAAADAG4RYAAADGINwCAADAGIRbAAAAGINwCwAAAGMQbgEAAGAMwi0AAACMQbgFAACAMQi3AAAAMAbhFgAAAMYg3AIAAMAYhFsAAAAYg3ALAAAAYxBuAQAAYAzCLQAAAIxBuAUAAIAxCLcAAAAwBuEWAAAAxiDcAgAAwBiEWwAAABiDcAsAAABjEG4BAABgDMItAAAAjEG4BQAAgDEItwAAADAG4RYAAADGINwCAADAGAEJt5s2bdLw4cPVo0cPTZgwQQ6HQ5KUnp4uu93u+fr5z3/u6ZOfn6/x48crMTFRGRkZcrvd1WoDAABA6Kj3cLtnzx49+OCDSk1N1ZYtW9S2bVs99NBDkqSvvvpKmZmZ2r59u7Zv367XX39dkuR0OpWcnKyePXtq7dq1cjgcysrKumAbAAAAQku9h1uHw6H7779fI0aMUKtWrXTzzTfryy+/1OnTp5Wfn69+/fqpWbNmatasmZo0aSJJ2rJli0pKSpSWlqb27dsrJSVFa9asuWAbAAAAQktYfe9w6NChXq8LCgrUoUMH5eXlye12a8yYMTp48KASExOVnp6utm3bKjc3VwkJCYqKipIk2e12z1SGqtp84XK5anhkMJnNZgt0CbWC/+fVw3gDQHDx5fOs3sPtjzmdTi1fvlyTJ0+Ww+FQ165dNXPmTLVo0UKPPPKIZs+ereeff14lJSWKi4vz9LNYLLJarSouLq6yLSYmptq15OTk1OqxwRxRUVHq0aNHoMuoFXl5eTp58mSgywhqjDcANGwBDbdLlixR48aNNXHiRIWHh2vUqFGetlmzZikpKUklJSWy2WyKiIjw6hsZGamysrIq23wJt/Hx8cacrQEqY7fbA10C6hHjDcAULper2iciAxZuP/74Y61cuVKrVq1SeHj4Oe3NmjVTRUWFDh06pJiYGO3atcurvbS0VOHh4VW2+cJmsxFuYTz+j4cWxhtAKArIrcD27t2rBx54QHPmzFGXLl0kSQsWLNC6des86+Tk5MhqtapNmzaKj4/Xzp07PW2FhYVyOp2KiYmpsg0AAAChpd7DbVlZme666y4lJSVp+PDhKi0tVWlpqS6//HItWbJE27dv19atW5Wenq6xY8cqKipKiYmJOn78uLKzsyVJmZmZ6t+/v2w2W5VtAAAACC31Pi3ho48+ksPhkMPh0KpVqzzLN2/erG+++UZ33323oqOjlZSUpJSUlDNFhoUpPT1dqampWrRokVwul1asWHHBNgAAAISWeg+3SUlJysvLO29bamqqUlNTK+23YcMG5eTkqE+fPmrZsmW12gAAABA6Anq3BF/FxsYqNjbW5zYAAACEhoBcUAYAAADUBcItAAAAjEG4BQAAgDEItwAAADAG4RYAAADGINwCAADAGIRbAAAAGINwCwAAAGMQbgEAAGAMwi0AAACMQbgFAIQ0V0VFoEuoMROOAagtYYEuAACAQLJZrZr56ocqOFQc6FL80umSGM2/ZVCgywCCBuEWABDyCg4VK3dfUaDLAFALmJYAAAAAYxBuAQAAYAzCLQAAAIxBuAUAAIAxCLcAAAAwBuEWAAAAxiDcAgAAwBiEWwAAABiDcAsAAABjEG4BAABgDMKtn1wVFYEuocZMOAYAAIAfCwt0AQ2VzWrVzFc/VMGh4kCX4pdOl8Ro/i2DAl0GAABArSLc1kDBoWLl7isKdBkAAAD4/5iWAAAAAGMQbgEAAGAMwi0AAACMQbgFAACAMQi3AAAAMAbhFgAAAMYg3AIAAMAYhFsAAAAYg3ALAAAAYxBuAQAAYAzCLQAAAIxBuAUAAIAxCLcAAAAwBuEWAAAAxiDcAgAAwBiEWwAAABiDcAsAAABjEG4BAABgDMItAAAAjEG4BQAAgDEItwAAADAG4RYAAADGINwCAADAGIRbAAAAGINwCwAAAGMQbgEAAGAMwi0AAACMQbgFAACAMQi3AAAAMAbhFgAAAMYg3AIAAMAYAQm3mzZt0vDhw9WjRw9NmDBBDodDkpSfn6/x48crMTFRGRkZcrvdnj7+tgEAACB01Hu43bNnjx588EGlpqZqy5Ytatu2rR566CE5nU4lJyerZ8+eWrt2rRwOh7KysiTJ7zYAAACElnoPtw6HQ/fff79GjBihVq1a6eabb9aXX36pLVu2qKSkRGlpaWrfvr1SUlK0Zs0aSfK7DQAAAKElrL53OHToUK/XBQUF6tChg3Jzc5WQkKCoqChJkt1u90xX8LfNFy6Xy6f1bTabz/sIRr4ed6hivEML4x1aGG8g+Pny/7vew+2POZ1OLV++XJMnT9bevXsVFxfnabNYLLJarSouLlZJSYlfbTExMdWuJScnp9rrRkVFqUePHtVeP5jl5eXp5MmTgS4jqDHeoYXxDi2MN2CegIbbJUuWqHHjxpo4caKWLFmiiIgIr/bIyEiVlZXJZrP51eZLuI2Pjzfmt3df2O32QJeAesR4hxbGO7Qw3jCZy+Wq9onIgIXbjz/+WCtXrtSqVasUHh6umJgY7dq1y2ud0tLSGrX5wmazhWS4DcVjDmWMd2hhvEML4w2cEZBbge3du1cPPPCA5syZoy5dukg6c+Z0586dnnUKCwvldDoVExPjdxsAAABCS72H27KyMt11111KSkrS8OHDVVpaqtLSUvXr10/Hjx9Xdna2JCkzM1P9+/eXzWZTYmKiX20AAAAILfU+LeGjjz6Sw+GQw+HQqlWrPMs3b96s9PR0paamatGiRXK5XFqxYsWZIsPC/GoDAABAaKn3cJuUlKS8vLzztsXFxWnDhg3KyclRnz591LJlS69+/rQBAAAgdAT0bgnnExsbq9jY2FptAwAAQGgIyAVlAAAAQF0g3AIAAMAYhFsAAAAYg3ALAAAAYxBuAQAAYAzCLQAAAIxBuAUAAIAxCLcAAAAwBuEWAAAAxiDcAgAAwBiEWwAAABiDcAsAAABjEG4BAABgDMItAAAAjEG4BQAAgDEItwAAADAG4RYAAADGINwCAADAGIRbAAAQMlwVFYEuocZMOIa6FBboAgAAAOqLzWrVzFc/VMGh4kCX4pdOl8Ro/i2DAl1GUCPcAgCAkFJwqFi5+4oCXQbqCNMSAAAAYAzCLQAAAIxBuAUAAIAxai3cut1uuVyu2tocAAAA4DO/wu2cOXPkdDq9ln3yyScaMWJErRQFAAAA+MOvcPvaa6+dE267dOmi/fv310pRAAAAgD98uhVYdna2pDNTEN566y1FRUV5Xv/zn//UFVdcUesFAgAAANXlU7hdu3atJMliseitt96SzWaTJFmtVnXo0EGLFy+u/QoBAACAavIp3P7tb3+TJF1++eXKzMxUkyZN6qQoAAAAwB9+zbn99a9/rYiIiNquBQAAAKgRvx6/O3fuXDmdTu3fv19ut9urrW3btrVSGAAAAOArv8LtihUrtGjRIpWXl3uFW4vFoq+//rrWigMAAAB84Ve4ffLJJ/XHP/5RN910k8LDw2u7JgAAAMAvfs25bdKkia699lqCLQAAAIKKX+F25syZmjVrlvLz82u7HgAAAMBvfk1LmD9/vo4eParRo0erWbNmXrcE27x5c60VBwAAAPjCr3C7cOHC2q4DAAAAqDG/wm1cXFxt1wEAAADUmF/hdtiwYbJYLJ7bgFksFk8btwIDAABAoPgVbnNzcz3/LisrU05Ojp5++mndfffdtVYYAAAA4Cu/7pbwY40aNVJiYqKWLVumjIyM2qgJAAAA8EuNw+1ZP/zwgw4dOlRbmwMAAAB8VqM5t2dVVFTo8OHDuu2222qtMAAAAMBXtXIrMIvFotatW6tdu3a1UhQAAADgD7+mJVx11VW66qqr1KhRIx05ckSRkZEEWwAAAAScX2duDx48qGnTpmn37t265JJLdOjQIXXs2FFLly5VbGxsbdcIAAAAVItfZ25nz56tK664Qlu3btX69ev1z3/+Uz179tSsWbNquz4AAACg2vwKtzt27NC0adMUEREhSYqMjFRycrI+++yzWi0OAAAA8IVf4bZbt256/fXXvZa9/vrr6tq1a60UBQAAAPjDrzm3c+bM0Z133qm33npLcXFx2rt3r0pLS7V8+fLarg8AAACoNr/Cbbdu3fTee+/p/fff1/79+zV27FgNGTJEjRs3ru36AAAAgGrza1rCf//7X916662yWq2aMmWKli1bpokTJ6qgoKC26wMAAACqze+7JVxzzTUaOHCgJOm1117TkCFD9PDDD9dqcQAAAIAv/Aq3X3/9te644w41bdpUktS4cWNNmjRJX331Va0WBwAAAPjCr3Brt9v1xhtveC174403uFsCAAAAAsqvC8pmz56tqVOnKjs7W5deeqkKCwt17NgxPf/887VdHwAAAFBtfoXbHj166L333tM//vEPHThwQKNHj9bgwYPVpEmT2q4PAAAAqDa/piVIUpMmTXTDDTdoypQpGjlypM/B9siRIxo2bJgKCws9y9LT02W32z1fP//5zz1t+fn5Gj9+vBITE5WRkSG3212tNgAAAIQOv8NtTRQVFSk5OVn79u3zWv7VV18pMzNT27dv1/bt2z1PQXM6nUpOTlbPnj21du1aORwOZWVlXbANAAAAocWvaQk1lZKSohEjRujzzz/3LDt9+rTy8/PVr18/RUdHe62/ZcsWlZSUKC0tTVFRUUpJSdHcuXM1fvz4Ktt84XK5fFrfZrP5tH6w8vW4QxXjHVoY79DCeIcWxrth8uV4AxJu09PT1a5dOz366KOeZXl5eXK73RozZowOHjyoxMREpaenq23btsrNzVVCQoKioqIknblbg8PhkKQq23yRk5NT7XWjoqLUo0cPn/cRjPLy8nTy5MlAlxHUGO/QwniHFsY7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6ikuLnZfffXV7ry8PLfb7Xa//vrr7iFDhrh3797tHjx4sPvLL79079u3z52Wlub+zW9+43a73e7du3e7ExMT3e+884778OHD7vvuu8/961//2tNWWT8El9/+9rfutWvXut3uqt/DlfXxpQ2B9cYbb7i7devmGZ8ffvjBPXHiRHe3bt28Ps9PnTrlLi4u9nzt37/fffXVV7v37NlT6WcFgs+Px/vjjz92X3nlle6PPvrIXVhY6J46dar75ptvdrvdVY/3WXl5ee7evXu7d+/eHajDCSjO3BqiqKhIycnJ2rdvX7WWO51OJScnq2fPnlq7dq0cDofnt749e/bowQcfVGpqqrZs2aK2bdvqoYceqrdjwYWVlpbqwQcfVLdu3SRJl19+uYqLi/Wf//xHCQkJ6tmzp9q2batx48apoKBAkuRwOHT//fdrxIgRatWqlW6++WZ9+eWXklRlPwSPN998Ux999JGkqt/DlfXxpQ2BdfToUWVkZKhTp06eZSkpKRoxYsQ560ZERKhZs2aer+zsbF133XVq165dpZ8VCC4/He/s7GxNmDBBAwYM0KWXXqrp06drx44dOnLkSJXjLZ15TO3s2bN1++23q3379oE8rIAh3Bqisg+9ypZv2bJFJSUlSktLU/v27ZWSkqI1a9ZIqjoEITi0adNGo0aNkiSVl5dr+fLluu6669SlSxd98skn+s9//qPjx4/r1Vdf1YABAyRJQ4cO1c033+zZRkFBgTp06CBJVfZDcPjpD7+q3sOV9aluGwIvIyNDSUlJuvLKKz3L0tPTdfvtt1fZ79SpU3r55Zf1u9/9TlLlnxUILj8d7yNHjqht27aedqv1TFwLCwvz6vfT8ZakVatWKTc3V3FxcXr//fdVXl5e9wcQZMIuvAoagvT0dLVr106PPvpotZbn5uYqISFBUVFRkiS73e6Zfzl06FCvdX8cghBccnNzddtttyk8PFzr169Xs2bNdP3112vs2LGSpLi4OK1evfqcfk6nU8uXL9fkyZMlnQm31emHwDn7w+/UqVOSqn4PV9anum0IrE8++URbt27V22+/rfnz53uWnz0zV5W33npLCQkJiouL81r+088KBI/zjXf37t21efNm3X777bJYLMrKylKvXr3UtGlTr74/He/S0lItWbJEHTp00IEDB/TGG2/o2Wef1csvv6zIyMh6P7ZA4cyt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VFRUpMTERElSRUWFSktLderUKc86N910k8LDw722deDAAV166aWe161bt1br1q09ry+77DK1atVKkrz6ut1uPf7449q4caO6dOmiJk2aqKKi4oL96sKhQ4e8am7Xrl2d7g8AfoxwCwB1wOVy6YorrtDixYslnQmfJSUlCgv7v4/dqKioc/q1adNGn376qed1QUGB7r//fmVlZUlSpRdvvf322/r000/1wQcfKDo6Wq+88orXfNwLXfRlsVjkdrurf4BVuOiii5SXl+d5ffYsMQDUB6YlAEAdGDx4sL777jt98cUXstlsWrdunaZMmXLBADly5Ejt2LFDWVlZ2r9/v5YtW6aLLrpIVmvVH9cnTpyQJBUXF+uDDz7QsmXLfAqrHTp00IcffqhDhw5p69at1e53PsOHD9dHH32kDz74QLt27dILL7xQo+0BgC8ItwBQB5o1a6alS5fqxRdf1C9/+Utt3LhRy5Yt8zpzez5xcXGefiNHjtSxY8f06KOPXnB/Y8aMUceOHTVixAg988wz+vWvf61vvvlGp06dqla906dP14cffqjhw4fr6aefrlafylxxxRWaMWOGZs6cqd/97ncaNGhQjbYHAL6wuGvr71AAAABAgDHnFgBwju+++06jRo06b1v//v315JNP1nNFAFA9nLkFAJzj9OnT5zw84qxGjRp57rwAAMGGcAsAAABjcEEZAAAAjEG4BQAAgDEItwAAADAG4RYAAADGINwCAADAGIRbAAAAGINwCwAAAGP8P5o/QiCFvTpYAAAAAElFTkSuQmCC"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 59
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:19.757947Z",
     "start_time": "2024-09-20T02:28:19.677231Z"
    }
   },
   "cell_type": "code",
   "source": "train_data_user_info = train_data.merge(user_info,on=['user_id'],how='left')",
   "id": "5f5a4137297161b6",
   "outputs": [],
   "execution_count": 60
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:20.262293Z",
     "start_time": "2024-09-20T02:28:19.758956Z"
    }
   },
   "cell_type": "code",
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "plt.title('Gender VS Label')\n",
    "ax = sns.countplot(x = 'gender',hue='label',data=train_data_user_info)\n",
    "for p in ax.patches:\n",
    "    height = p.get_height()"
   ],
   "id": "2b72f7b78a413010",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 800x800 with 1 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsUAAAK3CAYAAABtITLSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA8+0lEQVR4nO39f5hVdaH3/79mNj8cpIZIwxSwH8p4wBHkdtTUOoqWHo/elaTH6pj2LU9o5THoLjEzCi8FzzlqpdbhNssiNRNC6a5Tat7RD83MNCoB70nT8QfqAQkmYHCzP390Od8mfzE6wx54Px7X1XWx13uttd9772vRk+XaezXUarVaAACgYI31ngAAANSbKAYAoHiiGACA4oliAACKJ4oBACieKAYAoHiiGACA4oliAACKJ4oBACieKAZ4Ad/+9rczZcqU7LPPPjn11FOzcuXKfn2+X/ziF2lpaenX5/hrM2fOzAEHHJC/vbnpWWedlQMPPLB7+b333pt//ud/zqRJk3LYYYflm9/8Zq+ep6WlJV/72tde8jwXLlyYfffd9yVv/9c6OjrS0tKSjo6OPtkfsH0QxQDP46abbso555yT448/PpdffnmeeOKJfPzjH6/3tPrUIYcckqeeeirLly/vsfyOO+7IQQcdlIaGhjz++OM55ZRT8oY3vCH/+Z//maOOOiqf+9zn8stf/rJOswboe4PqPQGAgeqLX/xiDjnkkJx22mlJksGDB+d973tfli1blr322qvOs+sbb3rTm9LQ0JBf/OIX3a/pkUceycMPP5zTTz89SfJf//VfqVarmTVrVhobG3PAAQfkJz/5SRYuXJi2trZ6Th+gzzhTDPAcVq5cmeXLl+eQQw7pXjZ+/PgkyX333VevafW5kSNHZvz48bnjjju6lz3z54MPPjhJsnr16nR1daWzs7N7nf/4j//IySefvHUnC9CPRDHAc/jDH/6QJNltt926l73iFa/I4sWL8+Y3v7l72fe+970cc8wx2WefffKOd7wjt912W/fYF7/4xZx00kn59a9/neOOOy4TJ07MiSeemIceeqh7nQceeCAnnXRSWltbc+yxx+bee+/tMY9qtZovfvGLectb3pJ99903H/jAB3psnyRTpkzJwoULc9ddd+V973tfjjrqqF691oMPPjh33nln9/XDd9xxR97whjfkta99bZLkLW95S7q6unLKKafk17/+dZK/XCPc12fLf/KTn3S/T1OmTHnOa5Cvu+66HHzwwZk8eXJmzZqVrq6u7rEtea8Ano8oBngOq1atSpIMHz68x/Jx48ZlxIgRSZLbbrst06dPz5FHHpmvfOUrmThxYk499dS0t7d3r//II4/kox/9aKZOnZrPf/7zefTRR/Nv//ZvSf4ScR/+8Ifz1FNP5dJLL80//dM/5ZJLLunxfJdeemmuuuqqfOxjH8vll1+e9evX55RTTsnTTz/dY7277747p512WiZMmJB/+Zd/6dVrPfjgg3tcV3zHHXd0nyVOkn333Tfnn39+/vCHP+TEE0/MBz7wgR6vsS889NBDOf300/PGN74xX/nKV3Lqqadm7ty5ufPOO7vX2bBhQ6644orMnj07n/zkJ7No0aJ84Qtf6B7f0vcK4DnVAHiW73znO7Vx48bVfv7zn9dqtVrtyCOPrI0bN642bty42oIFC2q1Wq32z//8z7XTTjute5tqtVo74IADap///OdrtVqt9oUvfKE2bty42g9+8IPudf73//7ftbe+9a21Wq1W+/GPf1wbN25c7Z577ukeP//882vjxo2r1Wq12oYNG2qtra21r371q93jy5Ytq40bN6522223dS877LDDahMmTKj9+te/fkmvdePGjbVJkybVrrrqqtqjjz5aGzduXO1HP/rRs9ZbvXp17eKLL65NmjSptu+++9buuuuuLX6OcePG9Xgdf+v++++vXX311bW1a9fWarVabd26dbW3vOUttXnz5tVqtVptwYIFPT6PWq1Wu+iii2oTJ06sVavVLX6varVa7aGHHqqNGzeu9tBDD23x/IHtny/aATyHHXfcMUmyfv36JMlll12Wrq6unHrqqd3rrFixIk899dSzfkLtj3/8Y/efd95557ztbW/rfjxy5MjuM5cPPPBABg0alL333rt7vK2trfuygQceeCAbN27MBRdckAsuuOBZz3HggQd2P546dWomTZr0kl7rkCFDst9+++WOO+7IiBEjMnjw4Oy///7PWm/EiBE588wz8/a3vz0nnXRSzj333CxevPglPeffet3rXpeNGzdm3rx5ufPOO/O73/0uGzduzIYNG7rXaWhoyH777df9uLW1NevXr8/KlSvzpz/9aYvfK4DnIooBnsOYMWOSpPu3bN/4xjcmSTZt2tRjvfe85z054YQT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8rvf/a7PJwcAAFtDr6O4paUlN9xwQ49lN9xwg1+fAABgm9XrL9qde+65OfXUU7No0aLstttu6ejoyJ/+9KdcccUV/TE/AADod72O4vHjx+cHP/hB/u///b957LHH8va3vz1///d/n+HDh/fH/AAAoN/1OoqTZPjw4TnmmGP6ei4AAFAXvb6muL8tWrQohx56aPbdd9+ccsop6ejoSJKsWLEiU6dOTVtbW+bOnZtarda9TX+MAQBQjgEVxQ8++GAuueSSXHbZZfk//+f/ZNddd83MmTPT1dWVadOmZcKECVmwYEHa29uzcOHCJOmXMQAAyvKSLp/oL7///e8zceLETJgwIUly3HHH5cwzz8ySJUuybt26zJw5M01NTZk+fXo++9nPZurUqf0y1hvVarVP34NKpdKn+ytdX38+AMC2ozcdMKCieI899sjtt9+e3//+9xkzZkyuvvrqHHzwwVm2bFkmTpyYpqamJH/5Wbj29vYk6Zex3li6dOnLe9F/pampKePHj++z/ZEsX74869evr/c0AIABbsBF8ZFHHpl3vvOdSZLRo0fn29/+dubNm5fRo0d3r9fQ0JDGxsasWbMm69at6/Ox5ubmLZ5za2urs7sDWEtLS72nAADUSbVa3eITmAMqiu++++7ceuut+fa3v503vvGNmTdvXk499dQceOCBGTJkSI91hw4dmg0bNqRSqfT5WG+iuFKpiOIBzGcDAGyJAfVFu+9973v5x3/8x+yzzz7Zcccdc+aZZ6ajoyPNzc1ZtWpVj3U7OzszePDgfhkDAKAsAyqKq9Vqnnzyye7HnZ2d+fOf/5xBgwblnnvu6V7e0dGRrq6uNDc3p7W1tc/HAAAoy4CK4smTJ+emm27K1772tSxevDinn356dtppp5x00klZu3ZtFi1alCSZN29eDjrooFQqlbS1tfX5GAAAZWmoDaA7VtRqtVx22WVZsGBBnnjiiey5556ZPXt29t5779x8882ZMWNGdtxxx1Sr1cyfPz977rlnkvTL2IupVqu5++67M2nSpD4P6fde8t0se3jVi6/I89prt5H55pnuuggAJetNrw2oKH4xK1euzNKlSzN58uSMHDmy38deiCge2EQxANCbXhtQvz7xYkaNGpVRo0ZttTEAAMowoK4pBgCAehDFAAAUTxQDAFA8UQwAQPFEMQAAxRPFAAAUTxQDAFA8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ypQpOeOMMzJ//vysXbs2ixYtSpLMmzcvBx10UCqVStra2vp8DACAsgyoM8W77LJLj8fDhg3Lq171qowcOTKzZ8/OjBkzcuGFF6ZarWb+/PlJkkGDBvX5GAAAZRlQUfy35syZ0/3nI444Ij/84Q+zdOnSTJ48OSNHjuzXMQAAyjGgo/hvjRo1KqNGjdpqYwAAlGFAXVMMAAD1IIoBACieKAYAoHiiGACA4oliAACKJ4oBACieKAYAoHiiGACA4oliAACKJ4oBACieKAYAoHiiGACA4oliAACKJ4oBACieKAYAoHiiGACA4oliAACKJ4oBACieKAYAoHiiGACA4oliAACKJ4oBACieKAYAoHiiGACA4oliAACKJ4oBACieKAYAoHiiGACA4oliAACKJ4oBACieKAYAoHiiGACA4oliAACKJ4oBACieKAYAoHiiGACA4oliAACKJ4oBACieKAYAoHiiGACA4oliAACKJ4oBACieKAYAoHiiGACA4oliAACKJ4oBACieKAYAoHiiGACA4oliAACKJ4oBACieKAYAoHiiGACA4oliAACKJ4oBACieKAYAoHiiGACA4oliAACKJ4oBACieKAYAoHgDLopvvvnmHH744Rk/fnyOP/74tLe3J0lWrFiRqVOnpq2tLXPnzk2tVuvepj/GAAAox4CK4gcffDBnn312ZsyYkSVLlmTXXXfNpz71qXR1dWXatGmZMGFCFixYkPb29ixcuDBJ+mUMAICyDKgobm9vz8c+9rEcffTR2WmnnfLud787v/3tb7NkyZKsW7cuM2fOzNixYzN9+vRcf/31SdIvYwAAlGVQvSfw1w477LAej++///7svvvuWbZsWSZOnJimpqYkSUtLS/dlFf0x1hvVavUlvNLnV6lU+nR/pevrz4eBy7HTdxw3wPaiN3+fDago/mtdXV258sorc8opp+Shhx7K6NGju8caGhrS2NiYNWvWZN26dX0+1tzcvMXzXLp06ct8pf9/TU1NGT9+fJ/tj2T58uVZv359vadBP3Ps9C3HDVCiARvFl1xySYYNG5YTTjghl1xySYYMGdJjfOjQodmwYUMqlUqfj/UmiltbW52hGsBaWlrqPQXY5jhugO1FtVrd4hOYAzKKf/azn+Xaa6/Nddddl8GDB6e5uTn33Xdfj3U6Ozv7baw3KpWKKB7AfDbQe44boEQD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vM29996bUaNG9es8YVvnuIG/eOihh/Lxj388s2bNyh577PGi6zt2tk2imG1OW1tb1q5dm0WLFiVJ5s2bl4MOOiiVSiXr1q3Lpk2bnrXNlClT8qtf/Sq33357nn766Vx55ZU55JBDtvLMYWBy3MDz27BhQz70oQ/liCOOyOGHH57Ozs50dnamVqs5drYzDbUtuesBDDA333xzZsyYkR133DHVajXz58/PnnvumSlTpuTss8/OEUcc8axtvvnNb+aCCy7I8OHDM2zYsFx33XXZaaed6jB7qK+Wlpbccsst3V8EctzA87v55pvz4Q9/+FnLb7nllrzvfe9z7GxHRDHbrJUrV2bp0qWZPHlyRo4cuUXb/PGPf0x7e3v233//DB8+vJ9nCNsHxw28NI6dbYsoBgCgeK4pBgCgeKIYAIDiiWIAAIonigEAKJ4oBgCgeKIYgOe1cOHCnHTSSfWeBkC/E8UAABRPFAMAUDxRDLCNW7ZsWY455pgccMABueCCC3LUUUflG9/4RpYsWZJjjz02++23Xz71qU+lq6srSfLFL34xZ511Vi699NLst99+Oeyww3LnnXd27++yyy7LgQcemLe+9a35/e9/3+O5Fi1alLe97W054IADctFFF+Wv7//U0tKS++67L+eee27233//rF27duu8AQB9QBQDbONmzZqVY489NldddVWuv/76XHDBBdl3331z+umn5+STT87ChQvzu9/9LldccUX3Nj/+8Y/z4IMP5jvf+U4mT56ciy++OElyyy235KqrrsoXv/jFzJ07N4sXL+7e5s4778w555yTs88+O9/4xjdyww035MYbb+wxl3POOSc77rhjLr300jQ1NW2dNwCgD4higG3cvffem7e97W3Za6+9sscee+Thhx/OkiVLMn78+LzrXe/K2LFjc+KJJ+ZHP/pR9zaVSiWzZ8/OmDFj8s53vjOPPvpokuTmm2/Osccem7a2tkyePDnvete7urf5zne+k7e+9a059NBDM27cuPzP//k/e+wz+cvZ4k9+8pPZf//9M2jQoK3zBgD0AX9jAWzjxo4dm7vvvjuvetWr8sADD2SPPfbIL3/5y/z+97/PfvvtlySpVqsZNmxY9zaTJk3K0KFDkySDBw/uXv7444/nwAMP7H48ZsyY/OY3v0mSrFy5Mr/4xS+697lp06a0tLT0mItfqgC2VaIYYBu355575rzzzsunP/3pvPe9781ee+2VXXbZJVOmTMknPvGJJMnmzZuzfv367m2GDx/+nPt69atfnccff7z78TNnkJNkl112yYknnpiTTz45SfL0009n8+bNPbZ3yQSwrXL5BMA27KGHHsovf/nLXHPNNbnpppsyc+bMJMkxxxyTO++8M3/84x+TJF//+te7x17I4YcfnsWLF+euu+7KPffck+uuu6577B3veEduueWWPPnkk6lWq7n44otzySWX9MvrAtjanCkG2Ibttttu2WmnnXLSSSdl7dq1GTRoUN7xjnfkc5/7XObMmZM5c+bkoYceyj777JOLLrroRff3tre9LcuXL8/pp5+eESNG5PDDD+8O6/322y8f/ehH84lPfCJPPPFE3vSmN2X27Nn9/RIBtoqG2l//ng4A25Rvf/vb+a//+q+cd9552WGHHbJs2bL8y7/8S2677bbnvUQCgGdzphhgG3bggQfmu9/9bo455phs3Lgxu+22W8466yxBDNBLzhQDAFA8X7QDAKB4ohgAgOKJYgAAiieKAQAonigGAKB4ohgAgOKJYgAAiieKAQAo3v8HE3vwoUR0ZS4AAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 61
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:20.826658Z",
     "start_time": "2024-09-20T02:28:20.263294Z"
    }
   },
   "cell_type": "code",
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "plt.title('Age VS Label')\n",
    "ax = sns.countplot(x = 'age_range',hue='label',data=train_data_user_info)"
   ],
   "id": "bdef294fff807ae0",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 800x800 with 1 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAr4AAAK3CAYAAABjiEy9AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABAI0lEQVR4nO3deXRU9eH//9fMZCGADlI0iAGVDzAChk0CGuBDiFFcAY2CtVXqsVRA5djEamNBwfARwkcQ69ZPjoIgxaUQgoBWwA0FpCxCU0sSm7KFXQMhCYQJM/f3B1/mZ5oASZglmffzcY7nOPd9b+4775MJTy53ZmyWZVkCAAAAwpw91BMAAAAAgoHwBQAAgBEIXwAAABiB8AUAAIARCF8AAAAYgfAFAACAEQhfAAAAGIHwBQAAgBEIXwAAABiB8AWABnj00UeVlJQU9PPm5ubK5XIpPz+/2vacnBy5XC4VFhZKkkpKSpSenq5+/fqpf//+eu655+R2u+t8ngceeEDjx49v8DyLi4vlcrmUl5fX4K/xU8nJycrJyfHL1wJgLsIXAOrJ4/Fow4YN2r9/v4qKioJ67gEDBkiSNmzYUG37xo0bdemll6pLly7yer0aP3689u/fr9mzZystLU25ubnKzs4O6lwBoLEhfAGgnrZt26aysjJFRUVp3bp1QT33mbj929/+Vm37hg0blJiYKEkqLCzUt99+qz/84Q9KTEzUqFGjlJqayhVTAMYjfAGgntatW6e4uDgNGTJEa9euDfr5BwwYoE2bNsmyLEnSvn37tHfvXt/V4CNHjkg6fbvDGWPGjFFWVlbQ5woAjQnhCwD1tHbtWt+9sxs2bFBVVVW18U8++UQ33XSTEhISNHHiRD377LPq27ev9u7dK0nas2ePxo8fr969e+u///u/9dJLL+nUqVN1Pv+AAQN09OhRFRQUSJLv6u+ZK77x8fFq3bq1MjIytHz5cnm9Xl1++eVKSEjwx7fvs2vXLo0ZM0bXXXedEhMTNWnSJFVWVlbbZ9u2bbrtttsUHx+vhx9+WPv37682/tFHH+mOO+5Qjx49NGLECK1fv96vcwSAnyJ8AaAeysvL9fe//139+vVTQkKCjh8/rq1bt/rG9+zZo/T0dN1///2aNWuW1q1bp4qKCmVnZ6t169Zyu9369a9/rbKyMr322mtKS0vT/Pnz9eqrr9Z5DgkJCYqKivIF79/+9jd16dJFl156qSSpZcuWys7OVnR0tNLT03X77bfryy+/9Os6WJalRx55RD/88INeffVVPf/88/riiy/01ltvVdtv1qxZGj16tF5++WXt2bNHTzzxhG9s/fr1SktL09ChQ/XWW2+pZ8+eGjNmTNDvmwZgDsIXAOrhm2++0alTp9SvXz917txZrVu31tdff+0b/+6773TxxRfroYce0qBBg3Trrbfq6NGj6tOnj2JiYrR8+XLt3btXL7/8shITEzVixAiNGjVKS5curfMcmjVrpuuuu84Xvhs3btTAgQOr7RMfH6+//vWvmjp1qk6cOKFHHnlE77zzjn8WQdKJEyc0evRozZw5UzfccIOSk5PVq1evan8JkKTRo0dr1KhRSk5O1nPPPaetW7f69nn99deVnJysxx9/XAkJCXruuefUsmVLrVixwm/zBICfigj1BACgKTnzYrbk5GTftrVr1+q3v/2tJKljx446evSoNm/erP/6r//Spk2b1LNnT9++hYWFqqqq0g033FDja7vdbkVFRdVpHgMGDNCbb76pAwcOaPfu3b7bHH4qMjJS9957r2699VaNGzdOWVlZGjp0qC677LJ6fc+1ad68uW6++WYtWbJE06dP17Zt21RaWlrjdop+/fr5/r9Hjx6SpJ07d6pXr14qLCzU0aNH5XK5qh2za9euC54fANSG8AWAeli7dq1uv/12jRkzRpL02Wef6dVXX9XRo0fVqlUrXXrppWrbtq1++ctfyuv1qkePHho3bly1r9G2bVv96U9/qvG1IyLq/it54MCBevHFF/XOO+8oKiqqWnC++uqrKiws1B//+EdJp299eOqpp3TPPffoX//6l1/Cd//+/RoxYoQ6duyoW265Rb/5zW/09ddfa/PmzdX2s9lsvv+320//I6PX6/Vtu//++zVy5Mhqx1x00UUXPD8AqA23OgBAHe3du1c7d+5UUlKSunbtqq5du+rWW2+V1+v1vSjrtdde09ChQ7V27Vp9+umn+uCDD3TJJZf4vkbnzp31448/KjY21vc1jh49qrlz59brBW7XXHONfvazn2n+/Pm67rrr1KxZM9+Yw+HQV199pePHj/u2HT16VJLUrl27C1yF01auXKmKigrNmzdPo0ePVt++fWu9Urtlyxbf///jH/+QJHXo0EHS6bU4fPiwbx26du2q1atX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ZqbS09M1Y8YMeTweLViw4PQkIyL8PgYAAACzhOztzM6YPn267/9TUlK0cuVK5eXlqU+fPmrdunVAxwAAAGCOkIfvf4qNjVVsbGzQxgAAAGCGkH5kMQAAABAshC8AAACMQPgCAADACIQvAAAAjED4AgAAwAiELwAAAIxA+AIAAMAIhC8AAACMQPgCAADACIQvAAAAjED4AgAAwAiELwAAAIxA+AIAAMAIhC8AAACMQPgCAADACIQvAAAAjED4AgAAwAiELwAAAIxA+AIAAMAIhC8AAACMQPgCAADACIQvAAAAjED4AgAAwAiELwAAAIxA+AIAAMAIhC8AAACMQPgCAADACIQvAAAAjED4AgAAwAh+C1/LsuTxePz15QAAAAC/alD4Tp48WW63u9q2b775RrfddptfJgUAAAD4W4PC9/33368Rvp06ddL+/fv9MikAAADA3yLqs3Nubq6k07c1LFu2TDExMb7H69at07XXXuv3CQIAAAD+UK/wXbx4sSTJZrNp2bJlcjgckiS73a4rr7xSs2bN8v8MAQAAAD+oV/i+8847kqRrrrlG2dnZatmyZUAmBQAAAPhbg+7xHTVqlKKiovw9FwAAACBg6nXF94wpU6bI7XZr//79siyr2li7du38MjEAAADAnxoUvgsWLNCMGTNUVVVVLXxtNpu2b9/ut8kBAAAA/tKg8P3jH/+o3/3ud7rvvvsUGRnp7zkBAAAAftege3xbtmypG264gegFAABAk9Gg8J04caImTZqkwsJCf88HAAAACIgG3eowdepUHT16VMOHD9fFF19c7W3NPv30U79NDgAAAPCXBoXv9OnT/T0PAAAAIKAaFL5xcXH+ngcAAAAQUA0K3+TkZNlsNt9bmdlsNt8Yb2cGAACAxqhB4Zufn+/7/8rKSuXl5enVV1/V+PHj/TYxAAAAwJ8a9K4OP9WsWTMlJCTojTfeUFZWlj/mBAAAAPjdBYfvGT/++KMOHTrkry8HAAAA+NUF3eN7htfr1eHDh/Xggw/6bWIAAACAP/nl7cxsNpvatm2r9u3b+2VSAAAAgL816FaHfv36qV+/fmrWrJmOHDmi6OhoohcAAACNWoOu+B48eFDjxo3Trl27dNlll+nQoUO66qqr9Prrrys2NtbfcwQAAAAuWIOu+D777LO69tprtX79en388cdat26dunfvrkmTJvl7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+2rIkCHatGmT77jly5drwIABuvnmm5WVlaUbbrhB+fn5sixLb775poYMGaKBAwdq3rx5/loyAGgwwhcAQsTr9WrChAm65ZZbtHr1avXu3VszZsyQJE2ePFl33nmn5s2bp0WLFmnatGkaNmyYdu/erfHjx2v06NHKycnRd999pzfffLPO53z55Zd16NAhzZw5U+3bt5ckFRQUKDMzU9OmTdPHH3+skpISLVy40HfMl19+qd27d2vJkiXq06ePXnrpJUnSsWPHNGnSJM2aNUuPPvqoPvzwQ3344Ye6+uqrtXTpUmVnZ2vWrFl65ZVXNHv27GrBDAChQPgCQAgtXbpUDz30kPbt26eKigrt3LlTkrR9+3bdfPPNuuaaa9SpUyft3btXTqdTy5cvV7du3XTPPfeoQ4cOuu+++/TZZ5/V+XwtW7bU9OnTdf3116tFixaSpKuuukpff/214uPjVVRUJMuyfPOQJIfDoczMTLVv31533XWX9u/fL0nauXOnWrRoof79++vWW2/VDz/8IMuyFB0drdzcXI0cOVK9e/dW7969NWTIkHrNEwACISLUEwAAU9ntds2dO1eLFi1SXFycrrjiCnm9XklShw4dtHXrVl1yySXauXOnOnXqJEk6ePCg/vnPf6pv376SJI/Ho+bNm9f5nA888ECNbZWVlZo4caI2btyorl27yuFw+OYhSb169VJ0dLQkKTIy0re9Xbt2OnbsmHbv3q0DBw6oVatWatOmjW+e3377rd577z1J0smTJ5WSklKf5QEAvyN8ASBENmzYoHfffVerVq1SmzZt9OWXX+q7776TJHXu3FlTp07VpEmT9Itf/ELXXHONJKlt27ZKTk7WU089Jen07RInTpyo8zljYmJqbJs/f75KSkq0du1aRUVFacaMGSopKfGNt2zZstavFR0drY4dO+r222+Xw+HQCy+8ILvd7pvnPffco6FDh0qS3G53tWgGgFDgVgcACJHjx49LksrKyrR582ZNmzZNlmVpz5492rhxoy+KMzIyfMfccccd2rRpk3bt2iXpdLT+dPxC5nHkyBEtW7ZM7777rizLOu9xn3zyiWJjY5Wbm6svvvhCt912m29sxIgRWrFihSoqKlRZWalnn3222n3DABAKXPEFgBAZNGiQkpOTdffddysuLk4jR47UzJkzFRMTozZt2uiBBx5QWVmZIiIiNGLECD3//PNq3769pk+frunTp2vPnj3q0aOHZs2adUHzePDBB7Vlyxbdcsst6tWrl+655x5t2LDhvMcNGDBAWVlZuu+++1RWVian06knn3xS9957r4YNG6ZDhw7pkUceUXl5uVJSUjRhwoQLmicAXCibVZe/1gMAguYvf/mL/vrXv2rq1Klq1qyZ8vPz9Zvf/Ebr168/620HofC73/1O7dq10wMPPCCbzabc3FytWLFCOTk5oZ4aANSKK74A0Mhcf/31Wr58ue644w6dPHlSV1xxhX7/+9+fM3o3bdqksWPH1jqWmpp6wbdD1ObOO+/Uiy++qLfffluS5HK59PTTT/v9PADgL1zxBYAwcPLkSR0+fLjWsRYtWuiSSy4J8owAoPEhfAEAAGAE3tUBAAAARiB8AQAAYATCFwAAAEYgfAEAAGAEwhcAAABGIHwBAABgBMIXAAAARvj/ADomLZT8S/S2AAAAAElFTkSuQmCC"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 62
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:26.466621Z",
     "start_time": "2024-09-20T02:28:20.827657Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 按照user_id 连接 ，根据以左表为基础\n",
    "all_data_1 = user_log.merge(train_data,on=['user_id'],how='left')"
   ],
   "id": "62c74456793b1b2c",
   "outputs": [],
   "execution_count": 63
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:28.514917Z",
     "start_time": "2024-09-20T02:28:26.467623Z"
    }
   },
   "cell_type": "code",
   "source": "all_data_1[all_data_1['label'].notnull()].head()",
   "id": "b168846945136f7c",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     user_id  item_id  cat_id  seller_id  brand_id  time_stamp  action_type  \\\n",
       "419   234512   146770    1173        693    3186.0         625            0   \n",
       "420   234512   146770    1173        693    3186.0         625            0   \n",
       "421   234512  1106076     992       3783    8164.0        1016            0   \n",
       "422   234512  1106076     992       3783    8164.0        1016            0   \n",
       "423   234512   866567    1198        693    3186.0         625            0   \n",
       "\n",
       "     merchant_id  label  \n",
       "419       3018.0    0.0  \n",
       "420       3271.0    0.0  \n",
       "421       3018.0    0.0  \n",
       "422       3271.0    0.0  \n",
       "423       3018.0    0.0  "
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>cat_id</th>\n",
       "      <th>seller_id</th>\n",
       "      <th>brand_id</th>\n",
       "      <th>time_stamp</th>\n",
       "      <th>action_type</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>419</th>\n",
       "      <td>234512</td>\n",
       "      <td>146770</td>\n",
       "      <td>1173</td>\n",
       "      <td>693</td>\n",
       "      <td>3186.0</td>\n",
       "      <td>625</td>\n",
       "      <td>0</td>\n",
       "      <td>3018.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>420</th>\n",
       "      <td>234512</td>\n",
       "      <td>146770</td>\n",
       "      <td>1173</td>\n",
       "      <td>693</td>\n",
       "      <td>3186.0</td>\n",
       "      <td>625</td>\n",
       "      <td>0</td>\n",
       "      <td>3271.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>421</th>\n",
       "      <td>234512</td>\n",
       "      <td>1106076</td>\n",
       "      <td>992</td>\n",
       "      <td>3783</td>\n",
       "      <td>8164.0</td>\n",
       "      <td>1016</td>\n",
       "      <td>0</td>\n",
       "      <td>3018.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>422</th>\n",
       "      <td>234512</td>\n",
       "      <td>1106076</td>\n",
       "      <td>992</td>\n",
       "      <td>3783</td>\n",
       "      <td>8164.0</td>\n",
       "      <td>1016</td>\n",
       "      <td>0</td>\n",
       "      <td>3271.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>423</th>\n",
       "      <td>234512</td>\n",
       "      <td>866567</td>\n",
       "      <td>1198</td>\n",
       "      <td>693</td>\n",
       "      <td>3186.0</td>\n",
       "      <td>625</td>\n",
       "      <td>0</td>\n",
       "      <td>3018.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 64
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:30.126676Z",
     "start_time": "2024-09-20T02:28:28.515918Z"
    }
   },
   "cell_type": "code",
   "source": "all_data_2=all_data_1[all_data_1['label'].notnull()]",
   "id": "97ecb653997c94c2",
   "outputs": [],
   "execution_count": 65
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:30.644576Z",
     "start_time": "2024-09-20T02:28:30.129674Z"
    }
   },
   "cell_type": "code",
   "source": [
    "all_data_2_sum=all_data_2.groupby(['time_stamp'])['label'].sum().reset_index()\n",
    "all_data_2_sum.head()"
   ],
   "id": "5636dc710a5a84af",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   time_stamp   label\n",
       "0         511   943.0\n",
       "1         512   975.0\n",
       "2         513  1221.0\n",
       "3         514  1170.0\n",
       "4         515  1260.0"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>time_stamp</th>\n",
       "      <th>label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>511</td>\n",
       "      <td>943.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>512</td>\n",
       "      <td>975.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>513</td>\n",
       "      <td>1221.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>514</td>\n",
       "      <td>1170.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>515</td>\n",
       "      <td>1260.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 66
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:30.649076Z",
     "start_time": "2024-09-20T02:28:30.645577Z"
    }
   },
   "cell_type": "code",
   "source": [
    "all_data_2_sum['time_stamp'] = all_data_2_sum['time_stamp'].astype(str)\n",
    "all_data_2_sum['label'] = all_data_2_sum['label'].astype(int)\n"
   ],
   "id": "a59d8eb7db99fd4",
   "outputs": [],
   "execution_count": 67
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:30.658078Z",
     "start_time": "2024-09-20T02:28:30.650077Z"
    }
   },
   "cell_type": "code",
   "source": [
    "#用户存储处理后的时间戳数据\n",
    "a=[]\n",
    "for i in range(len(all_data_2_sum)):\n",
    "    if len(all_data_2_sum['time_stamp'][i])==3:\n",
    "        # 列中提取第一个字符（索引为0的字符），并将其添加到列表a中。\n",
    "        a.append(all_data_2_sum['time_stamp'][i][0])\n",
    "    else:\n",
    "        a.append(all_data_2_sum['time_stamp'][i][0:2])"
   ],
   "id": "84db66527ee9883",
   "outputs": [],
   "execution_count": 68
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:30.663768Z",
     "start_time": "2024-09-20T02:28:30.659079Z"
    }
   },
   "cell_type": "code",
   "source": [
    "all_data_2_sum['month']=a\n",
    "all_data_2_sum=all_data_2_sum.astype(int)"
   ],
   "id": "dad0311f068df787",
   "outputs": [],
   "execution_count": 69
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:30.670517Z",
     "start_time": "2024-09-20T02:28:30.664768Z"
    }
   },
   "cell_type": "code",
   "source": "all_data_2_sum['month']",
   "id": "b74b7879377edf1e",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0       5\n",
       "1       5\n",
       "2       5\n",
       "3       5\n",
       "4       5\n",
       "       ..\n",
       "181    11\n",
       "182    11\n",
       "183    11\n",
       "184    11\n",
       "185    11\n",
       "Name: month, Length: 186, dtype: int32"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 70
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "**特征工程**",
   "id": "e573adf049f7e6f4"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:31.876602Z",
     "start_time": "2024-09-20T02:28:31.680Z"
    }
   },
   "cell_type": "code",
   "source": [
    "del test_data['prob']\n",
    "train_data['target'] = 1\n",
    "test_data['target']=-1\n",
    "all_data = train_data.append(test_data)\n",
    "all_data = all_data.merge(user_info,on=['user_id'],how='left')\n",
    "del train_data, test_data, user_info\n",
    "gc.collect()"
   ],
   "id": "aa39ac3352e95267",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "30345"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 72
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:31.884574Z",
     "start_time": "2024-09-20T02:28:31.877601Z"
    }
   },
   "cell_type": "code",
   "source": "all_data.head()",
   "id": "865354f287cce47e",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  merchant_id  label  target  age_range  gender\n",
       "0    34176         3906    0.0       1        6.0     0.0\n",
       "1    34176          121    0.0       1        6.0     0.0\n",
       "2    34176         4356    1.0       1        6.0     0.0\n",
       "3    34176         2217    0.0       1        6.0     0.0\n",
       "4   230784         4818    0.0       1        0.0     0.0"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "      <th>target</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34176</td>\n",
       "      <td>3906</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34176</td>\n",
       "      <td>121</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34176</td>\n",
       "      <td>4356</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34176</td>\n",
       "      <td>2217</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>230784</td>\n",
       "      <td>4818</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 73
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:31.910059Z",
     "start_time": "2024-09-20T02:28:31.885573Z"
    }
   },
   "cell_type": "code",
   "source": "all_data.dropna(subset=['age_range','gender'],inplace=True)",
   "id": "3f687fe5f85ef1df",
   "outputs": [],
   "execution_count": 74
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:31.921688Z",
     "start_time": "2024-09-20T02:28:31.911061Z"
    }
   },
   "cell_type": "code",
   "source": "all_data.isnull().sum()",
   "id": "cbf7c8d9d52b2f5f",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "user_id             0\n",
       "merchant_id         0\n",
       "label          257626\n",
       "target              0\n",
       "age_range           0\n",
       "gender              0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 75
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:32.850407Z",
     "start_time": "2024-09-20T02:28:31.922689Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 用户店铺数\n",
    "# 统计每个用户（user_id）关联的卖家（seller_id）数量\n",
    "sell= user_log.groupby(['user_id'])['seller_id'].count().reset_index()\n",
    "\n",
    "all_data = all_data.merge(sell,on=['user_id'],how='inner')\n",
    "all_data.rename(columns={'seller_id':'sell_sum'},inplace=True)  #对合并后的列重命名\n",
    "all_data.head()"
   ],
   "id": "24d9e97dc4cedfc5",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  merchant_id  label  target  age_range  gender  sell_sum\n",
       "0    34176         3906    0.0       1        6.0     0.0       451\n",
       "1    34176          121    0.0       1        6.0     0.0       451\n",
       "2    34176         4356    1.0       1        6.0     0.0       451\n",
       "3    34176         2217    0.0       1        6.0     0.0       451\n",
       "4   230784         4818    0.0       1        0.0     0.0        54"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "      <th>target</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "      <th>sell_sum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34176</td>\n",
       "      <td>3906</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34176</td>\n",
       "      <td>121</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34176</td>\n",
       "      <td>4356</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34176</td>\n",
       "      <td>2217</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>230784</td>\n",
       "      <td>4818</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>54</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 76
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:32.855112Z",
     "start_time": "2024-09-20T02:28:32.851407Z"
    }
   },
   "cell_type": "code",
   "source": "user_log['seller_id']",
   "id": "553d563ee4db2478",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0           2882\n",
       "1           2882\n",
       "2           2882\n",
       "3           2882\n",
       "4           1253\n",
       "            ... \n",
       "54925325    1346\n",
       "54925326    1346\n",
       "54925327     983\n",
       "54925328    1346\n",
       "54925329    1346\n",
       "Name: seller_id, Length: 54925330, dtype: int16"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 77
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:28:32.859959Z",
     "start_time": "2024-09-20T02:28:32.856113Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def nunique_k(data,sigle_name,new_name_1):\n",
    "    data1=user_log.groupby(['user_id'])[sigle_name].nunique().reset_index()\n",
    "    \n",
    "    data_union=data.merge(data1,on=['user_id'],how='inner')\n",
    "    data_union.rename(columns={sigle_name:new_name_1},inplace=True)\n",
    "    return data_union\n",
    "    "
   ],
   "id": "9ad0f96c938d88a6",
   "outputs": [],
   "execution_count": 78
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:29:25.553667Z",
     "start_time": "2024-09-20T02:28:32.860962Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 不同店铺个数\n",
    "all_data=nunique_k(all_data,'seller_id','seller_id_unique')"
   ],
   "id": "5da0f73c4dfb74e9",
   "outputs": [],
   "execution_count": 79
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:30:08.940848Z",
     "start_time": "2024-09-20T02:29:25.554666Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 不同品类个数\n",
    "all_data=nunique_k(all_data,'cat_id','cat_id_unique')"
   ],
   "id": "45258006874323b7",
   "outputs": [],
   "execution_count": 80
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:31:00.668726Z",
     "start_time": "2024-09-20T02:30:08.941848Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 不同品牌个数\n",
    "all_data=nunique_k(all_data,'brand_id','brand_id_unique')"
   ],
   "id": "7d13ac0546966164",
   "outputs": [],
   "execution_count": 81
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:32:23.390470Z",
     "start_time": "2024-09-20T02:31:00.669728Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 不同商品个数\n",
    "all_data=nunique_k(all_data,'item_id','item_id_unique')"
   ],
   "id": "6299e5c547381483",
   "outputs": [],
   "execution_count": 82
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:32:51.041747Z",
     "start_time": "2024-09-20T02:32:23.394459Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 活跃天数\n",
    "all_data=nunique_k(all_data,'time_stamp','time_stamp_unique')"
   ],
   "id": "d6c27fede25d827",
   "outputs": [],
   "execution_count": 83
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:33:02.551339Z",
     "start_time": "2024-09-20T02:32:51.042748Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 不用行为种数\n",
    "all_data=nunique_k(all_data,'action_type','action_type_unique')"
   ],
   "id": "73a1979c3accdb7",
   "outputs": [],
   "execution_count": 84
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:33:02.559925Z",
     "start_time": "2024-09-20T02:33:02.552338Z"
    }
   },
   "cell_type": "code",
   "source": "all_data.head()",
   "id": "c47a5a3068a9f3ed",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  merchant_id  label  target  age_range  gender  sell_sum  \\\n",
       "0    34176         3906    0.0       1        6.0     0.0       451   \n",
       "1    34176          121    0.0       1        6.0     0.0       451   \n",
       "2    34176         4356    1.0       1        6.0     0.0       451   \n",
       "3    34176         2217    0.0       1        6.0     0.0       451   \n",
       "4   230784         4818    0.0       1        0.0     0.0        54   \n",
       "\n",
       "   seller_id_unique  cat_id_unique  brand_id_unique  item_id_unique  \\\n",
       "0               109             45              106             256   \n",
       "1               109             45              106             256   \n",
       "2               109             45              106             256   \n",
       "3               109             45              106             256   \n",
       "4                20             17               19              31   \n",
       "\n",
       "   time_stamp_unique  action_type_unique  \n",
       "0                 47                   3  \n",
       "1                 47                   3  \n",
       "2                 47                   3  \n",
       "3                 47                   3  \n",
       "4                 16                   2  "
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "      <th>target</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "      <th>sell_sum</th>\n",
       "      <th>seller_id_unique</th>\n",
       "      <th>cat_id_unique</th>\n",
       "      <th>brand_id_unique</th>\n",
       "      <th>item_id_unique</th>\n",
       "      <th>time_stamp_unique</th>\n",
       "      <th>action_type_unique</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34176</td>\n",
       "      <td>3906</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>106</td>\n",
       "      <td>256</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34176</td>\n",
       "      <td>121</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>106</td>\n",
       "      <td>256</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34176</td>\n",
       "      <td>4356</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>106</td>\n",
       "      <td>256</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34176</td>\n",
       "      <td>2217</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>106</td>\n",
       "      <td>256</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>230784</td>\n",
       "      <td>4818</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>54</td>\n",
       "      <td>20</td>\n",
       "      <td>17</td>\n",
       "      <td>19</td>\n",
       "      <td>31</td>\n",
       "      <td>16</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 85
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:33:02.572585Z",
     "start_time": "2024-09-20T02:33:02.560926Z"
    }
   },
   "cell_type": "code",
   "source": "user_log.head()",
   "id": "32233ec8fee74e3f",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  item_id  cat_id  seller_id  brand_id  time_stamp  action_type\n",
       "0   328862   323294     833       2882    2660.0         829            0\n",
       "1   328862   844400    1271       2882    2660.0         829            0\n",
       "2   328862   575153    1271       2882    2660.0         829            0\n",
       "3   328862   996875    1271       2882    2660.0         829            0\n",
       "4   328862  1086186    1271       1253    1049.0         829            0"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>cat_id</th>\n",
       "      <th>seller_id</th>\n",
       "      <th>brand_id</th>\n",
       "      <th>time_stamp</th>\n",
       "      <th>action_type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>328862</td>\n",
       "      <td>323294</td>\n",
       "      <td>833</td>\n",
       "      <td>2882</td>\n",
       "      <td>2660.0</td>\n",
       "      <td>829</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>328862</td>\n",
       "      <td>844400</td>\n",
       "      <td>1271</td>\n",
       "      <td>2882</td>\n",
       "      <td>2660.0</td>\n",
       "      <td>829</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>328862</td>\n",
       "      <td>575153</td>\n",
       "      <td>1271</td>\n",
       "      <td>2882</td>\n",
       "      <td>2660.0</td>\n",
       "      <td>829</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>328862</td>\n",
       "      <td>996875</td>\n",
       "      <td>1271</td>\n",
       "      <td>2882</td>\n",
       "      <td>2660.0</td>\n",
       "      <td>829</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>328862</td>\n",
       "      <td>1086186</td>\n",
       "      <td>1271</td>\n",
       "      <td>1253</td>\n",
       "      <td>1049.0</td>\n",
       "      <td>829</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 86
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:33:02.575391Z",
     "start_time": "2024-09-20T02:33:02.573584Z"
    }
   },
   "cell_type": "code",
   "source": "",
   "id": "bd5267103620c84a",
   "outputs": [],
   "execution_count": 86
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:33:02.598688Z",
     "start_time": "2024-09-20T02:33:02.576390Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def most_love(data_1,most_name,new_name_2):\n",
    "    # Counter(x)：这里的Counter是collections模块中的一个类，它用于统计可迭代对象，如果x = [1, 1, 2, 3]，那么Counter(x)会得到一个类似Counter({1: 2, 2: 1, 3: 1})的结果，表示元素 1 出现了 2 次，元素 2 和 3 各出现了 1 次。\n",
    "    data2=user_log.groupby(['user_id'])[most_name].apply(lambda x: Counter(x).most_common(1)[0][0]).reset_index()\n",
    "    data_union_1=data_1.merge(data2,on=['user_id'],how='inner')\n",
    "    data_union_1.rename(columns={most_name:new_name_2},inplace=True)\n",
    "    return data_union_1"
   ],
   "id": "54255d9f989c9a93",
   "outputs": [],
   "execution_count": 87
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:33:18.309366Z",
     "start_time": "2024-09-20T02:33:02.599687Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 用户最喜欢的店铺\n",
    "all_data=most_love(all_data,'seller_id','sell_id_most')"
   ],
   "id": "7921d3cf1c64063a",
   "outputs": [],
   "execution_count": 88
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:33:33.797448Z",
     "start_time": "2024-09-20T02:33:18.310372Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 最喜欢的类目\n",
    "all_data=most_love(all_data,'cat_id','cat_id_most')"
   ],
   "id": "97dec1d8d858448",
   "outputs": [],
   "execution_count": 89
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:33:50.615534Z",
     "start_time": "2024-09-20T02:33:33.798447Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 最喜欢的品牌\n",
    "all_data=most_love(all_data,'brand_id','brand_id_most')"
   ],
   "id": "10fa65d9d5c699c9",
   "outputs": [],
   "execution_count": 90
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:34:03.493474Z",
     "start_time": "2024-09-20T02:33:50.616535Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 最常见的行为动作\n",
    "all_data=most_love(all_data,'action_type','action_type_most')"
   ],
   "id": "ff14de40b7de0f20",
   "outputs": [],
   "execution_count": 91
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:34:03.503844Z",
     "start_time": "2024-09-20T02:34:03.494474Z"
    }
   },
   "cell_type": "code",
   "source": "all_data.head()",
   "id": "e58ddb77d0271a80",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  merchant_id  label  target  age_range  gender  sell_sum  \\\n",
       "0    34176         3906    0.0       1        6.0     0.0       451   \n",
       "1    34176          121    0.0       1        6.0     0.0       451   \n",
       "2    34176         4356    1.0       1        6.0     0.0       451   \n",
       "3    34176         2217    0.0       1        6.0     0.0       451   \n",
       "4   230784         4818    0.0       1        0.0     0.0        54   \n",
       "\n",
       "   seller_id_unique  cat_id_unique  brand_id_unique  item_id_unique  \\\n",
       "0               109             45              106             256   \n",
       "1               109             45              106             256   \n",
       "2               109             45              106             256   \n",
       "3               109             45              106             256   \n",
       "4                20             17               19              31   \n",
       "\n",
       "   time_stamp_unique  action_type_unique  sell_id_most  cat_id_most  \\\n",
       "0                 47                   3           331          662   \n",
       "1                 47                   3           331          662   \n",
       "2                 47                   3           331          662   \n",
       "3                 47                   3           331          662   \n",
       "4                 16                   2          3556          407   \n",
       "\n",
       "   brand_id_most  action_type_most  \n",
       "0         4094.0                 0  \n",
       "1         4094.0                 0  \n",
       "2         4094.0                 0  \n",
       "3         4094.0                 0  \n",
       "4         1236.0                 0  "
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "      <th>target</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "      <th>sell_sum</th>\n",
       "      <th>seller_id_unique</th>\n",
       "      <th>cat_id_unique</th>\n",
       "      <th>brand_id_unique</th>\n",
       "      <th>item_id_unique</th>\n",
       "      <th>time_stamp_unique</th>\n",
       "      <th>action_type_unique</th>\n",
       "      <th>sell_id_most</th>\n",
       "      <th>cat_id_most</th>\n",
       "      <th>brand_id_most</th>\n",
       "      <th>action_type_most</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34176</td>\n",
       "      <td>3906</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>106</td>\n",
       "      <td>256</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "      <td>331</td>\n",
       "      <td>662</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34176</td>\n",
       "      <td>121</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>106</td>\n",
       "      <td>256</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "      <td>331</td>\n",
       "      <td>662</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34176</td>\n",
       "      <td>4356</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>106</td>\n",
       "      <td>256</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "      <td>331</td>\n",
       "      <td>662</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34176</td>\n",
       "      <td>2217</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>106</td>\n",
       "      <td>256</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "      <td>331</td>\n",
       "      <td>662</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>230784</td>\n",
       "      <td>4818</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>54</td>\n",
       "      <td>20</td>\n",
       "      <td>17</td>\n",
       "      <td>19</td>\n",
       "      <td>31</td>\n",
       "      <td>16</td>\n",
       "      <td>2</td>\n",
       "      <td>3556</td>\n",
       "      <td>407</td>\n",
       "      <td>1236.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 92
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:34:03.511221Z",
     "start_time": "2024-09-20T02:34:03.504845Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def most_love_cnt(data_1,most_name,new_name_2):\n",
    "    data2=user_log.groupby(['user_id'])[most_name].apply(lambda x: Counter(x).most_common(1)[0][1]).reset_index()\n",
    "    data_union_1=data_1.merge(data2,on=['user_id'],how='inner')\n",
    "    data_union_1.rename(columns={most_name:new_name_2},inplace=True)\n",
    "    return data_union_1"
   ],
   "id": "a08d1707d17fef3d",
   "outputs": [],
   "execution_count": 93
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:34:18.969009Z",
     "start_time": "2024-09-20T02:34:03.512221Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 用户最喜欢的店铺 行为次数\n",
    "all_data=most_love_cnt(all_data,'seller_id','seller_id_most_cnt')"
   ],
   "id": "26f27b3d21f420f6",
   "outputs": [],
   "execution_count": 94
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:34:34.330159Z",
     "start_time": "2024-09-20T02:34:18.970015Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 最喜欢的类目 行为次数\n",
    "all_data=most_love_cnt(all_data,'cat_id','cat_id_most_cnt')"
   ],
   "id": "5f279aa227c92bb4",
   "outputs": [],
   "execution_count": 95
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:34:51.458319Z",
     "start_time": "2024-09-20T02:34:34.331158Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 最喜欢的品牌 行为次数\n",
    "all_data=most_love_cnt(all_data,'brand_id','brand_id_most_cnt')"
   ],
   "id": "6631b1a206cd31a7",
   "outputs": [],
   "execution_count": 96
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:35:04.242025Z",
     "start_time": "2024-09-20T02:34:51.459318Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 最常见的行为动作 行为次数\n",
    "all_data=most_love_cnt(all_data,'action_type','action_type_most_cnt')"
   ],
   "id": "e058b6dbdb131949",
   "outputs": [],
   "execution_count": 97
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:35:04.317203Z",
     "start_time": "2024-09-20T02:35:04.243027Z"
    }
   },
   "cell_type": "code",
   "source": "all_data.head()",
   "id": "3aee2eb156cea58b",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   user_id  merchant_id  label  target  age_range  gender  sell_sum  \\\n",
       "0    34176         3906    0.0       1        6.0     0.0       451   \n",
       "1    34176          121    0.0       1        6.0     0.0       451   \n",
       "2    34176         4356    1.0       1        6.0     0.0       451   \n",
       "3    34176         2217    0.0       1        6.0     0.0       451   \n",
       "4   230784         4818    0.0       1        0.0     0.0        54   \n",
       "\n",
       "   seller_id_unique  cat_id_unique  brand_id_unique  ...  time_stamp_unique  \\\n",
       "0               109             45              106  ...                 47   \n",
       "1               109             45              106  ...                 47   \n",
       "2               109             45              106  ...                 47   \n",
       "3               109             45              106  ...                 47   \n",
       "4                20             17               19  ...                 16   \n",
       "\n",
       "   action_type_unique  sell_id_most  cat_id_most  brand_id_most  \\\n",
       "0                   3           331          662         4094.0   \n",
       "1                   3           331          662         4094.0   \n",
       "2                   3           331          662         4094.0   \n",
       "3                   3           331          662         4094.0   \n",
       "4                   2          3556          407         1236.0   \n",
       "\n",
       "   action_type_most  seller_id_most_cnt  cat_id_most_cnt  brand_id_most_cnt  \\\n",
       "0                 0                  70               98                 70   \n",
       "1                 0                  70               98                 70   \n",
       "2                 0                  70               98                 70   \n",
       "3                 0                  70               98                 70   \n",
       "4                 0                  10                9                 10   \n",
       "\n",
       "   action_type_most_cnt  \n",
       "0                   410  \n",
       "1                   410  \n",
       "2                   410  \n",
       "3                   410  \n",
       "4                    47  \n",
       "\n",
       "[5 rows x 21 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "      <th>target</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "      <th>sell_sum</th>\n",
       "      <th>seller_id_unique</th>\n",
       "      <th>cat_id_unique</th>\n",
       "      <th>brand_id_unique</th>\n",
       "      <th>...</th>\n",
       "      <th>time_stamp_unique</th>\n",
       "      <th>action_type_unique</th>\n",
       "      <th>sell_id_most</th>\n",
       "      <th>cat_id_most</th>\n",
       "      <th>brand_id_most</th>\n",
       "      <th>action_type_most</th>\n",
       "      <th>seller_id_most_cnt</th>\n",
       "      <th>cat_id_most_cnt</th>\n",
       "      <th>brand_id_most_cnt</th>\n",
       "      <th>action_type_most_cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34176</td>\n",
       "      <td>3906</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>106</td>\n",
       "      <td>...</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "      <td>331</td>\n",
       "      <td>662</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34176</td>\n",
       "      <td>121</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>106</td>\n",
       "      <td>...</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "      <td>331</td>\n",
       "      <td>662</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34176</td>\n",
       "      <td>4356</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>106</td>\n",
       "      <td>...</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "      <td>331</td>\n",
       "      <td>662</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34176</td>\n",
       "      <td>2217</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451</td>\n",
       "      <td>109</td>\n",
       "      <td>45</td>\n",
       "      <td>106</td>\n",
       "      <td>...</td>\n",
       "      <td>47</td>\n",
       "      <td>3</td>\n",
       "      <td>331</td>\n",
       "      <td>662</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0</td>\n",
       "      <td>70</td>\n",
       "      <td>98</td>\n",
       "      <td>70</td>\n",
       "      <td>410</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>230784</td>\n",
       "      <td>4818</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>54</td>\n",
       "      <td>20</td>\n",
       "      <td>17</td>\n",
       "      <td>19</td>\n",
       "      <td>...</td>\n",
       "      <td>16</td>\n",
       "      <td>2</td>\n",
       "      <td>3556</td>\n",
       "      <td>407</td>\n",
       "      <td>1236.0</td>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>9</td>\n",
       "      <td>10</td>\n",
       "      <td>47</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 21 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 98
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:35:04.405083Z",
     "start_time": "2024-09-20T02:35:04.318204Z"
    }
   },
   "cell_type": "code",
   "source": "user_id_union=list(set(all_data['user_id']))",
   "id": "8acb827e08fba3a1",
   "outputs": [],
   "execution_count": 99
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:35:04.409859Z",
     "start_time": "2024-09-20T02:35:04.406082Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def action_type_select(data,num,new_name):\n",
    "    d=user_log.groupby(['user_id'])['action_type'].apply(lambda x: Counter(x))\n",
    "    e=dict(d)\n",
    "    k=[]\n",
    "    for i in user_id_union:\n",
    "        try: \n",
    "            # 尝试从字典e中获取对应用户的num操作类型的计数。\n",
    "            k.append(e[(i,num)])\n",
    "        except KeyError:\n",
    "            # 如果存在，则添加到列表k中；否则，添加0。\n",
    "            k.append(0) \n",
    "    data3=pd.DataFrame({'user_id':user_id_union,new_name:k})\n",
    "    data_union_2=data.merge(data3,on=['user_id'],how='inner')\n",
    "    return data_union_2"
   ],
   "id": "2cdcf2154c0f72b9",
   "outputs": [],
   "execution_count": 100
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:35:40.525087Z",
     "start_time": "2024-09-20T02:35:04.410857Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 点击次数\n",
    "all_data=action_type_select(all_data,0,'action_type_sum_0')"
   ],
   "id": "dfc7587b78c57516",
   "outputs": [],
   "execution_count": 101
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:36:16.927321Z",
     "start_time": "2024-09-20T02:35:40.526089Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 加购次数\n",
    "all_data=action_type_select(all_data,1,'action_type_sum_1')"
   ],
   "id": "8e4fcccc51b26e91",
   "outputs": [],
   "execution_count": 102
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:36:53.390740Z",
     "start_time": "2024-09-20T02:36:16.928321Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 购买次数\n",
    "all_data=action_type_select(all_data,2,'action_type_sum_2')"
   ],
   "id": "9a9c207ea4dad714",
   "outputs": [],
   "execution_count": 103
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:37:30.594014Z",
     "start_time": "2024-09-20T02:36:53.391740Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 收藏次数\n",
    "all_data=action_type_select(all_data,3,'action_type_sum_2')"
   ],
   "id": "f5e670bd9a8760c5",
   "outputs": [],
   "execution_count": 104
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:43:20.713342Z",
     "start_time": "2024-09-20T02:37:30.595015Z"
    }
   },
   "cell_type": "code",
   "source": "all_data=all_data.T.drop_duplicates(keep='first').T",
   "id": "f593866c101f69f3",
   "outputs": [],
   "execution_count": 105
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:43:20.730307Z",
     "start_time": "2024-09-20T02:43:20.714318Z"
    }
   },
   "cell_type": "code",
   "source": "all_data.head()",
   "id": "45490adabe533bc4",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "    user_id  merchant_id  label  target  age_range  gender  sell_sum  \\\n",
       "0   34176.0       3906.0    0.0     1.0        6.0     0.0     451.0   \n",
       "1   34176.0        121.0    0.0     1.0        6.0     0.0     451.0   \n",
       "2   34176.0       4356.0    1.0     1.0        6.0     0.0     451.0   \n",
       "3   34176.0       2217.0    0.0     1.0        6.0     0.0     451.0   \n",
       "4  230784.0       4818.0    0.0     1.0        0.0     0.0      54.0   \n",
       "\n",
       "   seller_id_unique  cat_id_unique  brand_id_unique  ...  brand_id_most  \\\n",
       "0             109.0           45.0            106.0  ...         4094.0   \n",
       "1             109.0           45.0            106.0  ...         4094.0   \n",
       "2             109.0           45.0            106.0  ...         4094.0   \n",
       "3             109.0           45.0            106.0  ...         4094.0   \n",
       "4              20.0           17.0             19.0  ...         1236.0   \n",
       "\n",
       "   action_type_most  seller_id_most_cnt  cat_id_most_cnt  brand_id_most_cnt  \\\n",
       "0               0.0                70.0             98.0               70.0   \n",
       "1               0.0                70.0             98.0               70.0   \n",
       "2               0.0                70.0             98.0               70.0   \n",
       "3               0.0                70.0             98.0               70.0   \n",
       "4               0.0                10.0              9.0               10.0   \n",
       "\n",
       "   action_type_most_cnt  action_type_sum_0  action_type_sum_1  \\\n",
       "0                 410.0              410.0                NaN   \n",
       "1                 410.0              410.0                NaN   \n",
       "2                 410.0              410.0                NaN   \n",
       "3                 410.0              410.0                NaN   \n",
       "4                  47.0               47.0                NaN   \n",
       "\n",
       "   action_type_sum_2_x  action_type_sum_2_y  \n",
       "0                 34.0                  7.0  \n",
       "1                 34.0                  7.0  \n",
       "2                 34.0                  7.0  \n",
       "3                 34.0                  7.0  \n",
       "4                  7.0                  NaN  \n",
       "\n",
       "[5 rows x 25 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "      <th>target</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "      <th>sell_sum</th>\n",
       "      <th>seller_id_unique</th>\n",
       "      <th>cat_id_unique</th>\n",
       "      <th>brand_id_unique</th>\n",
       "      <th>...</th>\n",
       "      <th>brand_id_most</th>\n",
       "      <th>action_type_most</th>\n",
       "      <th>seller_id_most_cnt</th>\n",
       "      <th>cat_id_most_cnt</th>\n",
       "      <th>brand_id_most_cnt</th>\n",
       "      <th>action_type_most_cnt</th>\n",
       "      <th>action_type_sum_0</th>\n",
       "      <th>action_type_sum_1</th>\n",
       "      <th>action_type_sum_2_x</th>\n",
       "      <th>action_type_sum_2_y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34176.0</td>\n",
       "      <td>3906.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451.0</td>\n",
       "      <td>109.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>106.0</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>98.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>34.0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34176.0</td>\n",
       "      <td>121.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451.0</td>\n",
       "      <td>109.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>106.0</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>98.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>34.0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34176.0</td>\n",
       "      <td>4356.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451.0</td>\n",
       "      <td>109.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>106.0</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>98.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>34.0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34176.0</td>\n",
       "      <td>2217.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451.0</td>\n",
       "      <td>109.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>106.0</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>98.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>34.0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>230784.0</td>\n",
       "      <td>4818.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>54.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>17.0</td>\n",
       "      <td>19.0</td>\n",
       "      <td>...</td>\n",
       "      <td>1236.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>47.0</td>\n",
       "      <td>47.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 25 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 106,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 106
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:43:20.793348Z",
     "start_time": "2024-09-20T02:43:20.731286Z"
    }
   },
   "cell_type": "code",
   "source": [
    "train = all_data[all_data['target'] == 1].reset_index(drop = True)\n",
    "test = all_data[all_data['target'] == -1].reset_index(drop = True)"
   ],
   "id": "d27a8499033c987",
   "outputs": [],
   "execution_count": 107
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:43:20.822977Z",
     "start_time": "2024-09-20T02:43:20.794329Z"
    }
   },
   "cell_type": "code",
   "source": [
    "train.drop(['target'],axis=1,inplace=True)\n",
    "test.drop(['target'],axis=1,inplace=True)"
   ],
   "id": "d571893afd80a465",
   "outputs": [],
   "execution_count": 108
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:43:20.897399Z",
     "start_time": "2024-09-20T02:43:20.823967Z"
    }
   },
   "cell_type": "code",
   "source": "train.fillna(0,inplace=True)",
   "id": "b0b94aba82c7f205",
   "outputs": [],
   "execution_count": 109
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:43:20.914893Z",
     "start_time": "2024-09-20T02:43:20.898379Z"
    }
   },
   "cell_type": "code",
   "source": "test.drop(['label'],axis=1,inplace=True)",
   "id": "33fe47cbf9211ddd",
   "outputs": [],
   "execution_count": 110
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:43:20.987618Z",
     "start_time": "2024-09-20T02:43:20.915853Z"
    }
   },
   "cell_type": "code",
   "source": "test.fillna(0,inplace=True)",
   "id": "6bfd3875c1114d79",
   "outputs": [],
   "execution_count": 111
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:43:21.005272Z",
     "start_time": "2024-09-20T02:43:20.988609Z"
    }
   },
   "cell_type": "code",
   "source": "test.head()",
   "id": "a5b61428cf57028a",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "    user_id  merchant_id  age_range  gender  sell_sum  seller_id_unique  \\\n",
       "0  163968.0       4605.0        0.0     0.0      81.0              21.0   \n",
       "1  360576.0       1581.0        2.0     2.0      77.0              37.0   \n",
       "2   98688.0       1964.0        6.0     0.0      56.0              22.0   \n",
       "3   98688.0       3645.0        6.0     0.0      56.0              22.0   \n",
       "4  295296.0       3361.0        2.0     1.0     176.0              56.0   \n",
       "\n",
       "   cat_id_unique  brand_id_unique  item_id_unique  time_stamp_unique  ...  \\\n",
       "0           21.0             22.0            34.0               26.0  ...   \n",
       "1           27.0             37.0            65.0               22.0  ...   \n",
       "2           18.0             21.0            25.0               10.0  ...   \n",
       "3           18.0             21.0            25.0               10.0  ...   \n",
       "4           32.0             46.0            85.0               33.0  ...   \n",
       "\n",
       "   brand_id_most  action_type_most  seller_id_most_cnt  cat_id_most_cnt  \\\n",
       "0         7176.0               0.0                22.0             17.0   \n",
       "1         4066.0               0.0                10.0             13.0   \n",
       "2         3636.0               0.0                11.0             11.0   \n",
       "3         3636.0               0.0                11.0             11.0   \n",
       "4          487.0               0.0                50.0             59.0   \n",
       "\n",
       "   brand_id_most_cnt  action_type_most_cnt  action_type_sum_0  \\\n",
       "0               22.0                  63.0               63.0   \n",
       "1               10.0                  71.0               71.0   \n",
       "2               11.0                  51.0               51.0   \n",
       "3               11.0                  51.0               51.0   \n",
       "4               49.0                 162.0              162.0   \n",
       "\n",
       "   action_type_sum_1  action_type_sum_2_x  action_type_sum_2_y  \n",
       "0                0.0                 16.0                  2.0  \n",
       "1                0.0                  6.0                  0.0  \n",
       "2                0.0                  5.0                  0.0  \n",
       "3                0.0                  5.0                  0.0  \n",
       "4                0.0                  7.0                  7.0  \n",
       "\n",
       "[5 rows x 23 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "      <th>sell_sum</th>\n",
       "      <th>seller_id_unique</th>\n",
       "      <th>cat_id_unique</th>\n",
       "      <th>brand_id_unique</th>\n",
       "      <th>item_id_unique</th>\n",
       "      <th>time_stamp_unique</th>\n",
       "      <th>...</th>\n",
       "      <th>brand_id_most</th>\n",
       "      <th>action_type_most</th>\n",
       "      <th>seller_id_most_cnt</th>\n",
       "      <th>cat_id_most_cnt</th>\n",
       "      <th>brand_id_most_cnt</th>\n",
       "      <th>action_type_most_cnt</th>\n",
       "      <th>action_type_sum_0</th>\n",
       "      <th>action_type_sum_1</th>\n",
       "      <th>action_type_sum_2_x</th>\n",
       "      <th>action_type_sum_2_y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>163968.0</td>\n",
       "      <td>4605.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>81.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>34.0</td>\n",
       "      <td>26.0</td>\n",
       "      <td>...</td>\n",
       "      <td>7176.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>17.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>63.0</td>\n",
       "      <td>63.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>360576.0</td>\n",
       "      <td>1581.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>77.0</td>\n",
       "      <td>37.0</td>\n",
       "      <td>27.0</td>\n",
       "      <td>37.0</td>\n",
       "      <td>65.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>...</td>\n",
       "      <td>4066.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>71.0</td>\n",
       "      <td>71.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>98688.0</td>\n",
       "      <td>1964.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>56.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>25.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>...</td>\n",
       "      <td>3636.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>51.0</td>\n",
       "      <td>51.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>98688.0</td>\n",
       "      <td>3645.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>56.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>25.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>...</td>\n",
       "      <td>3636.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>51.0</td>\n",
       "      <td>51.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>295296.0</td>\n",
       "      <td>3361.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>176.0</td>\n",
       "      <td>56.0</td>\n",
       "      <td>32.0</td>\n",
       "      <td>46.0</td>\n",
       "      <td>85.0</td>\n",
       "      <td>33.0</td>\n",
       "      <td>...</td>\n",
       "      <td>487.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>50.0</td>\n",
       "      <td>59.0</td>\n",
       "      <td>49.0</td>\n",
       "      <td>162.0</td>\n",
       "      <td>162.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 23 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 112,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 112
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:43:25.788592Z",
     "start_time": "2024-09-20T02:43:21.006259Z"
    }
   },
   "cell_type": "code",
   "source": [
    "train.to_csv('train_all_k.csv',header=True,index=False)\n",
    "test.to_csv('test_all_k.csv',header=True,index=False)"
   ],
   "id": "e0b4b36d7628690f",
   "outputs": [],
   "execution_count": 113
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:43:26.151572Z",
     "start_time": "2024-09-20T02:43:25.790577Z"
    }
   },
   "cell_type": "code",
   "source": "pd.read_csv('train_all_k.csv').head()",
   "id": "bc914db741a4205a",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "    user_id  merchant_id  label  age_range  gender  sell_sum  \\\n",
       "0   34176.0       3906.0    0.0        6.0     0.0     451.0   \n",
       "1   34176.0        121.0    0.0        6.0     0.0     451.0   \n",
       "2   34176.0       4356.0    1.0        6.0     0.0     451.0   \n",
       "3   34176.0       2217.0    0.0        6.0     0.0     451.0   \n",
       "4  230784.0       4818.0    0.0        0.0     0.0      54.0   \n",
       "\n",
       "   seller_id_unique  cat_id_unique  brand_id_unique  item_id_unique  ...  \\\n",
       "0             109.0           45.0            106.0           256.0  ...   \n",
       "1             109.0           45.0            106.0           256.0  ...   \n",
       "2             109.0           45.0            106.0           256.0  ...   \n",
       "3             109.0           45.0            106.0           256.0  ...   \n",
       "4              20.0           17.0             19.0            31.0  ...   \n",
       "\n",
       "   brand_id_most  action_type_most  seller_id_most_cnt  cat_id_most_cnt  \\\n",
       "0         4094.0               0.0                70.0             98.0   \n",
       "1         4094.0               0.0                70.0             98.0   \n",
       "2         4094.0               0.0                70.0             98.0   \n",
       "3         4094.0               0.0                70.0             98.0   \n",
       "4         1236.0               0.0                10.0              9.0   \n",
       "\n",
       "   brand_id_most_cnt  action_type_most_cnt  action_type_sum_0  \\\n",
       "0               70.0                 410.0              410.0   \n",
       "1               70.0                 410.0              410.0   \n",
       "2               70.0                 410.0              410.0   \n",
       "3               70.0                 410.0              410.0   \n",
       "4               10.0                  47.0               47.0   \n",
       "\n",
       "   action_type_sum_1  action_type_sum_2_x  action_type_sum_2_y  \n",
       "0                0.0                 34.0                  7.0  \n",
       "1                0.0                 34.0                  7.0  \n",
       "2                0.0                 34.0                  7.0  \n",
       "3                0.0                 34.0                  7.0  \n",
       "4                0.0                  7.0                  0.0  \n",
       "\n",
       "[5 rows x 24 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "      <th>sell_sum</th>\n",
       "      <th>seller_id_unique</th>\n",
       "      <th>cat_id_unique</th>\n",
       "      <th>brand_id_unique</th>\n",
       "      <th>item_id_unique</th>\n",
       "      <th>...</th>\n",
       "      <th>brand_id_most</th>\n",
       "      <th>action_type_most</th>\n",
       "      <th>seller_id_most_cnt</th>\n",
       "      <th>cat_id_most_cnt</th>\n",
       "      <th>brand_id_most_cnt</th>\n",
       "      <th>action_type_most_cnt</th>\n",
       "      <th>action_type_sum_0</th>\n",
       "      <th>action_type_sum_1</th>\n",
       "      <th>action_type_sum_2_x</th>\n",
       "      <th>action_type_sum_2_y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34176.0</td>\n",
       "      <td>3906.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451.0</td>\n",
       "      <td>109.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>106.0</td>\n",
       "      <td>256.0</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>98.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>34.0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34176.0</td>\n",
       "      <td>121.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451.0</td>\n",
       "      <td>109.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>106.0</td>\n",
       "      <td>256.0</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>98.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>34.0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34176.0</td>\n",
       "      <td>4356.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451.0</td>\n",
       "      <td>109.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>106.0</td>\n",
       "      <td>256.0</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>98.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>34.0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34176.0</td>\n",
       "      <td>2217.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451.0</td>\n",
       "      <td>109.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>106.0</td>\n",
       "      <td>256.0</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>98.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>34.0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>230784.0</td>\n",
       "      <td>4818.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>54.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>17.0</td>\n",
       "      <td>19.0</td>\n",
       "      <td>31.0</td>\n",
       "      <td>...</td>\n",
       "      <td>1236.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>47.0</td>\n",
       "      <td>47.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 114,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 114
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "建模",
   "id": "25a4641174734dc0"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:43:26.513234Z",
     "start_time": "2024-09-20T02:43:26.152555Z"
    }
   },
   "cell_type": "code",
   "source": [
    "train_data=pd.read_csv('train_all_k.csv')\n",
    "train_data.head()"
   ],
   "id": "10a50754e0e31f1c",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "    user_id  merchant_id  label  age_range  gender  sell_sum  \\\n",
       "0   34176.0       3906.0    0.0        6.0     0.0     451.0   \n",
       "1   34176.0        121.0    0.0        6.0     0.0     451.0   \n",
       "2   34176.0       4356.0    1.0        6.0     0.0     451.0   \n",
       "3   34176.0       2217.0    0.0        6.0     0.0     451.0   \n",
       "4  230784.0       4818.0    0.0        0.0     0.0      54.0   \n",
       "\n",
       "   seller_id_unique  cat_id_unique  brand_id_unique  item_id_unique  ...  \\\n",
       "0             109.0           45.0            106.0           256.0  ...   \n",
       "1             109.0           45.0            106.0           256.0  ...   \n",
       "2             109.0           45.0            106.0           256.0  ...   \n",
       "3             109.0           45.0            106.0           256.0  ...   \n",
       "4              20.0           17.0             19.0            31.0  ...   \n",
       "\n",
       "   brand_id_most  action_type_most  seller_id_most_cnt  cat_id_most_cnt  \\\n",
       "0         4094.0               0.0                70.0             98.0   \n",
       "1         4094.0               0.0                70.0             98.0   \n",
       "2         4094.0               0.0                70.0             98.0   \n",
       "3         4094.0               0.0                70.0             98.0   \n",
       "4         1236.0               0.0                10.0              9.0   \n",
       "\n",
       "   brand_id_most_cnt  action_type_most_cnt  action_type_sum_0  \\\n",
       "0               70.0                 410.0              410.0   \n",
       "1               70.0                 410.0              410.0   \n",
       "2               70.0                 410.0              410.0   \n",
       "3               70.0                 410.0              410.0   \n",
       "4               10.0                  47.0               47.0   \n",
       "\n",
       "   action_type_sum_1  action_type_sum_2_x  action_type_sum_2_y  \n",
       "0                0.0                 34.0                  7.0  \n",
       "1                0.0                 34.0                  7.0  \n",
       "2                0.0                 34.0                  7.0  \n",
       "3                0.0                 34.0                  7.0  \n",
       "4                0.0                  7.0                  0.0  \n",
       "\n",
       "[5 rows x 24 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>label</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "      <th>sell_sum</th>\n",
       "      <th>seller_id_unique</th>\n",
       "      <th>cat_id_unique</th>\n",
       "      <th>brand_id_unique</th>\n",
       "      <th>item_id_unique</th>\n",
       "      <th>...</th>\n",
       "      <th>brand_id_most</th>\n",
       "      <th>action_type_most</th>\n",
       "      <th>seller_id_most_cnt</th>\n",
       "      <th>cat_id_most_cnt</th>\n",
       "      <th>brand_id_most_cnt</th>\n",
       "      <th>action_type_most_cnt</th>\n",
       "      <th>action_type_sum_0</th>\n",
       "      <th>action_type_sum_1</th>\n",
       "      <th>action_type_sum_2_x</th>\n",
       "      <th>action_type_sum_2_y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34176.0</td>\n",
       "      <td>3906.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451.0</td>\n",
       "      <td>109.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>106.0</td>\n",
       "      <td>256.0</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>98.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>34.0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>34176.0</td>\n",
       "      <td>121.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451.0</td>\n",
       "      <td>109.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>106.0</td>\n",
       "      <td>256.0</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>98.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>34.0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34176.0</td>\n",
       "      <td>4356.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451.0</td>\n",
       "      <td>109.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>106.0</td>\n",
       "      <td>256.0</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>98.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>34.0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34176.0</td>\n",
       "      <td>2217.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>451.0</td>\n",
       "      <td>109.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>106.0</td>\n",
       "      <td>256.0</td>\n",
       "      <td>...</td>\n",
       "      <td>4094.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>98.0</td>\n",
       "      <td>70.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>410.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>34.0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>230784.0</td>\n",
       "      <td>4818.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>54.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>17.0</td>\n",
       "      <td>19.0</td>\n",
       "      <td>31.0</td>\n",
       "      <td>...</td>\n",
       "      <td>1236.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>47.0</td>\n",
       "      <td>47.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 115,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 115
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:43:26.872598Z",
     "start_time": "2024-09-20T02:43:26.514208Z"
    }
   },
   "cell_type": "code",
   "source": [
    "test_data=pd.read_csv('test_all_k.csv')\n",
    "test_data.head()"
   ],
   "id": "1db97c68aa1d84c9",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "    user_id  merchant_id  age_range  gender  sell_sum  seller_id_unique  \\\n",
       "0  163968.0       4605.0        0.0     0.0      81.0              21.0   \n",
       "1  360576.0       1581.0        2.0     2.0      77.0              37.0   \n",
       "2   98688.0       1964.0        6.0     0.0      56.0              22.0   \n",
       "3   98688.0       3645.0        6.0     0.0      56.0              22.0   \n",
       "4  295296.0       3361.0        2.0     1.0     176.0              56.0   \n",
       "\n",
       "   cat_id_unique  brand_id_unique  item_id_unique  time_stamp_unique  ...  \\\n",
       "0           21.0             22.0            34.0               26.0  ...   \n",
       "1           27.0             37.0            65.0               22.0  ...   \n",
       "2           18.0             21.0            25.0               10.0  ...   \n",
       "3           18.0             21.0            25.0               10.0  ...   \n",
       "4           32.0             46.0            85.0               33.0  ...   \n",
       "\n",
       "   brand_id_most  action_type_most  seller_id_most_cnt  cat_id_most_cnt  \\\n",
       "0         7176.0               0.0                22.0             17.0   \n",
       "1         4066.0               0.0                10.0             13.0   \n",
       "2         3636.0               0.0                11.0             11.0   \n",
       "3         3636.0               0.0                11.0             11.0   \n",
       "4          487.0               0.0                50.0             59.0   \n",
       "\n",
       "   brand_id_most_cnt  action_type_most_cnt  action_type_sum_0  \\\n",
       "0               22.0                  63.0               63.0   \n",
       "1               10.0                  71.0               71.0   \n",
       "2               11.0                  51.0               51.0   \n",
       "3               11.0                  51.0               51.0   \n",
       "4               49.0                 162.0              162.0   \n",
       "\n",
       "   action_type_sum_1  action_type_sum_2_x  action_type_sum_2_y  \n",
       "0                0.0                 16.0                  2.0  \n",
       "1                0.0                  6.0                  0.0  \n",
       "2                0.0                  5.0                  0.0  \n",
       "3                0.0                  5.0                  0.0  \n",
       "4                0.0                  7.0                  7.0  \n",
       "\n",
       "[5 rows x 23 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>merchant_id</th>\n",
       "      <th>age_range</th>\n",
       "      <th>gender</th>\n",
       "      <th>sell_sum</th>\n",
       "      <th>seller_id_unique</th>\n",
       "      <th>cat_id_unique</th>\n",
       "      <th>brand_id_unique</th>\n",
       "      <th>item_id_unique</th>\n",
       "      <th>time_stamp_unique</th>\n",
       "      <th>...</th>\n",
       "      <th>brand_id_most</th>\n",
       "      <th>action_type_most</th>\n",
       "      <th>seller_id_most_cnt</th>\n",
       "      <th>cat_id_most_cnt</th>\n",
       "      <th>brand_id_most_cnt</th>\n",
       "      <th>action_type_most_cnt</th>\n",
       "      <th>action_type_sum_0</th>\n",
       "      <th>action_type_sum_1</th>\n",
       "      <th>action_type_sum_2_x</th>\n",
       "      <th>action_type_sum_2_y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>163968.0</td>\n",
       "      <td>4605.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>81.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>34.0</td>\n",
       "      <td>26.0</td>\n",
       "      <td>...</td>\n",
       "      <td>7176.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>17.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>63.0</td>\n",
       "      <td>63.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>360576.0</td>\n",
       "      <td>1581.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>77.0</td>\n",
       "      <td>37.0</td>\n",
       "      <td>27.0</td>\n",
       "      <td>37.0</td>\n",
       "      <td>65.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>...</td>\n",
       "      <td>4066.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>71.0</td>\n",
       "      <td>71.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>98688.0</td>\n",
       "      <td>1964.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>56.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>25.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>...</td>\n",
       "      <td>3636.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>51.0</td>\n",
       "      <td>51.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>98688.0</td>\n",
       "      <td>3645.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>56.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>25.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>...</td>\n",
       "      <td>3636.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>51.0</td>\n",
       "      <td>51.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>295296.0</td>\n",
       "      <td>3361.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>176.0</td>\n",
       "      <td>56.0</td>\n",
       "      <td>32.0</td>\n",
       "      <td>46.0</td>\n",
       "      <td>85.0</td>\n",
       "      <td>33.0</td>\n",
       "      <td>...</td>\n",
       "      <td>487.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>50.0</td>\n",
       "      <td>59.0</td>\n",
       "      <td>49.0</td>\n",
       "      <td>162.0</td>\n",
       "      <td>162.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 23 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 116,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 116
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:43:26.880349Z",
     "start_time": "2024-09-20T02:43:26.873588Z"
    }
   },
   "cell_type": "code",
   "source": "train_data['label'].value_counts()",
   "id": "a80e0a790543e780",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0    241303\n",
       "1.0     15838\n",
       "Name: label, dtype: int64"
      ]
     },
     "execution_count": 117,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 117
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:43:26.953012Z",
     "start_time": "2024-09-20T02:43:26.881340Z"
    }
   },
   "cell_type": "code",
   "source": [
    "target = train_data['label']\n",
    "target.head\n",
    "train.fillna(0,inplace=True)\n",
    "train_data.drop(['label'],axis=1,inplace=True)\n",
    "train_data.drop(['user_id'],axis=1,inplace=True)\n",
    "train_data.drop(['merchant_id'],axis=1,inplace=True)\n",
    "train_data.head"
   ],
   "id": "a964458a9449a653",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<bound method NDFrame.head of         age_range  gender  sell_sum  seller_id_unique  cat_id_unique  \\\n",
       "0             6.0     0.0     451.0             109.0           45.0   \n",
       "1             6.0     0.0     451.0             109.0           45.0   \n",
       "2             6.0     0.0     451.0             109.0           45.0   \n",
       "3             6.0     0.0     451.0             109.0           45.0   \n",
       "4             0.0     0.0      54.0              20.0           17.0   \n",
       "...           ...     ...       ...               ...            ...   \n",
       "257136        4.0     1.0     117.0              33.0           25.0   \n",
       "257137        0.0     1.0     198.0              38.0           20.0   \n",
       "257138        0.0     1.0     198.0              38.0           20.0   \n",
       "257139        0.0     1.0     198.0              38.0           20.0   \n",
       "257140        4.0     2.0     194.0              50.0           29.0   \n",
       "\n",
       "        brand_id_unique  item_id_unique  time_stamp_unique  \\\n",
       "0                 106.0           256.0               47.0   \n",
       "1                 106.0           256.0               47.0   \n",
       "2                 106.0           256.0               47.0   \n",
       "3                 106.0           256.0               47.0   \n",
       "4                  19.0            31.0               16.0   \n",
       "...                 ...             ...                ...   \n",
       "257136             32.0            49.0               12.0   \n",
       "257137             36.0            89.0                6.0   \n",
       "257138             36.0            89.0                6.0   \n",
       "257139             36.0            89.0                6.0   \n",
       "257140             49.0           127.0               23.0   \n",
       "\n",
       "        action_type_unique  sell_id_most  ...  brand_id_most  \\\n",
       "0                      3.0         331.0  ...         4094.0   \n",
       "1                      3.0         331.0  ...         4094.0   \n",
       "2                      3.0         331.0  ...         4094.0   \n",
       "3                      3.0         331.0  ...         4094.0   \n",
       "4                      2.0        3556.0  ...         1236.0   \n",
       "...                    ...           ...  ...            ...   \n",
       "257136                 3.0         100.0  ...         2276.0   \n",
       "257137                 3.0        4976.0  ...         6144.0   \n",
       "257138                 3.0        4976.0  ...         6144.0   \n",
       "257139                 3.0        4976.0  ...         6144.0   \n",
       "257140                 3.0        4140.0  ...         5696.0   \n",
       "\n",
       "        action_type_most  seller_id_most_cnt  cat_id_most_cnt  \\\n",
       "0                    0.0                70.0             98.0   \n",
       "1                    0.0                70.0             98.0   \n",
       "2                    0.0                70.0             98.0   \n",
       "3                    0.0                70.0             98.0   \n",
       "4                    0.0                10.0              9.0   \n",
       "...                  ...                 ...              ...   \n",
       "257136               0.0                22.0             15.0   \n",
       "257137               0.0                28.0             38.0   \n",
       "257138               0.0                28.0             38.0   \n",
       "257139               0.0                28.0             38.0   \n",
       "257140               0.0                24.0             33.0   \n",
       "\n",
       "        brand_id_most_cnt  action_type_most_cnt  action_type_sum_0  \\\n",
       "0                    70.0                 410.0              410.0   \n",
       "1                    70.0                 410.0              410.0   \n",
       "2                    70.0                 410.0              410.0   \n",
       "3                    70.0                 410.0              410.0   \n",
       "4                    10.0                  47.0               47.0   \n",
       "...                   ...                   ...                ...   \n",
       "257136               25.0                 107.0              107.0   \n",
       "257137               28.0                 162.0              162.0   \n",
       "257138               28.0                 162.0              162.0   \n",
       "257139               28.0                 162.0              162.0   \n",
       "257140               24.0                 181.0              181.0   \n",
       "\n",
       "        action_type_sum_1  action_type_sum_2_x  action_type_sum_2_y  \n",
       "0                     0.0                 34.0                  7.0  \n",
       "1                     0.0                 34.0                  7.0  \n",
       "2                     0.0                 34.0                  7.0  \n",
       "3                     0.0                 34.0                  7.0  \n",
       "4                     0.0                  7.0                  0.0  \n",
       "...                   ...                  ...                  ...  \n",
       "257136                0.0                  9.0                  1.0  \n",
       "257137                0.0                  5.0                 31.0  \n",
       "257138                0.0                  5.0                 31.0  \n",
       "257139                0.0                  5.0                 31.0  \n",
       "257140                0.0                  9.0                  4.0  \n",
       "\n",
       "[257141 rows x 21 columns]>"
      ]
     },
     "execution_count": 118,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 118
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "不同模型",
   "id": "fc262fc699394882"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:43:30.612157Z",
     "start_time": "2024-09-20T02:43:26.954003Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.naive_bayes import GaussianNB\n",
    "from sklearn.model_selection import cross_val_score\n",
    "from sklearn import tree\n",
    "from sklearn.ensemble import BaggingClassifier\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.ensemble import ExtraTreesClassifier\n",
    "from sklearn.ensemble import AdaBoostClassifier\n",
    "from sklearn.ensemble import GradientBoostingClassifier\n",
    "from imblearn.over_sampling import SMOTE\n",
    "from functools import partial\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "from sklearn.model_selection import learning_curve\n",
    "from sklearn.ensemble import VotingClassifier\n",
    "from sklearn.feature_selection import SelectKBest\n",
    "# from sklearn.feature_selection import chi2\n",
    "from sklearn.feature_selection import mutual_info_classif\n",
    "import lightgbm\n",
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "from sklearn import metrics\n",
    "from sklearn.metrics import roc_auc_score, roc_curve, accuracy_score, confusion_matrix, log_loss, auc, \\\n",
    "    precision_recall_curve\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n"
   ],
   "id": "7e335bbfbd7cc42",
   "outputs": [],
   "execution_count": 119
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:43:30.617159Z",
     "start_time": "2024-09-20T02:43:30.613140Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def model_clf(model):\n",
    "    model.fit(X_train, y_train)\n",
    "    y_train_pred = model.predict_proba(X_train)\n",
    "    y_train_pred_pos = y_train_pred[:,1]\n",
    "\n",
    "    y_test_pred = model.predict_proba(X_test)\n",
    "    y_test_pred_pos = y_test_pred[:,1]\n",
    "# 计算训练数据的AUC（曲线下面积）评分\n",
    "    auc_train = roc_auc_score(y_train, y_train_pred_pos)#AUC评分\n",
    "    # 计算测试数据的AUC评分\n",
    "    auc_test = roc_auc_score(y_test, y_test_pred_pos)\n",
    "\n",
    "    print(f\"Train AUC Score {auc_train}\")\n",
    "    print(f\"Test AUC Score {auc_test}\")\n",
    "\n",
    "    fpr, tpr, _ = roc_curve(y_test,y_test_pred_pos)#绘制ROC曲线\n",
    "    return fpr,tpr"
   ],
   "id": "73aa52d1e0fe9751",
   "outputs": [],
   "execution_count": 120
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "GaussianNB 模型\n",
   "id": "2a774f744d594654"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:43:31.013738Z",
     "start_time": "2024-09-20T02:43:30.617670Z"
    }
   },
   "cell_type": "code",
   "source": [
    "stdScaler = StandardScaler()\n",
    "X = stdScaler.fit_transform(train_data)\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, target, random_state=0)\n",
    "clf = GaussianNB()\n",
    "model_clf(clf)"
   ],
   "id": "b3ef21f8b952c14e",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train AUC Score 0.560347058613604\n",
      "Test AUC Score 0.5555306340529743\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(array([0.        , 0.00501498, 0.00508118, ..., 0.99965243, 0.99968553,\n",
       "        1.        ]),\n",
       " array([0.        , 0.00879235, 0.00879235, ..., 1.        , 1.        ,\n",
       "        1.        ]))"
      ]
     },
     "execution_count": 121,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 121
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "随机森林",
   "id": "2ea304df92eb31ea"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:43:31.902342Z",
     "start_time": "2024-09-20T02:43:31.014723Z"
    }
   },
   "cell_type": "code",
   "source": [
    "X_train, X_test, y_train, y_test = train_test_split(train_data, target, random_state=0)\n",
    "clf = RandomForestClassifier(n_estimators=10, max_depth=3, min_samples_split=12, random_state=0)\n",
    "model_clf(clf)"
   ],
   "id": "cb8310074e7f9b54",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train AUC Score 0.580717915119356\n",
      "Test AUC Score 0.5708682145736065\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(array([0.00000000e+00, 1.65510849e-05, 1.65510849e-05, ...,\n",
       "        9.99751734e-01, 9.99933796e-01, 1.00000000e+00]),\n",
       " array([0.00000000e+00, 0.00000000e+00, 2.58598397e-04, ...,\n",
       "        1.00000000e+00, 1.00000000e+00, 1.00000000e+00]))"
      ]
     },
     "execution_count": 122,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 122
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T07:21:10.592483Z",
     "start_time": "2024-09-20T06:16:43.554732Z"
    }
   },
   "cell_type": "code",
   "source": [
    "X_train, X_test, y_train, y_test = train_test_split(train_data, target, random_state=0)\n",
    "clf = RandomForestClassifier(n_estimators=10, max_depth=3, min_samples_split=12, random_state=0)\n",
    "clf.fit(X_train, y_train)\n",
    "#网格搜索\n",
    "clf_params = {\n",
    "    'n_estimators': [50, 100, 200],  # 树的数量\n",
    "    'max_depth': [ 10, 20, 30],  # 树的最大深度\n",
    "    'min_samples_leaf': [1, 2, 4],  # 叶子节点所需的最小样本数\n",
    "}\n",
    "\n",
    "clf_model=GridSearchCV(clf, param_grid=clf_params, cv=5);\n",
    "clf_model.fit(X_train, y_train)\n",
    "#获取最优参数\n",
    "clf_best_model=clf_model.best_estimator_\n",
    "clf_proba = clf_best_model.predict_proba(X_test)\n",
    "rf_fpr,rf_tpr,_ = roc_curve(y_test, clf_proba[:,1])\n",
    "clf_auc=roc_auc_score(rf_fpr,rf_tpr)\n",
    "clf_auc"
   ],
   "id": "db9681984a1207a5",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5875144842858492"
      ]
     },
     "execution_count": 131,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 131
  },
  {
   "metadata": {},
   "cell_type": "code",
   "outputs": [],
   "execution_count": null,
   "source": "",
   "id": "b7ad898721ac6a53"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T07:39:59.073730Z",
     "start_time": "2024-09-20T07:39:56.778126Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn2pmml import sklearn2pmml\n",
    "# best_clf 是通过 grid_search.best_estimator_ 获取的最佳模型\n",
    "\n",
    "# 定义PMML文件的路径和名称\n",
    "pmml_file_path = 'model.pmml'\n",
    "\n",
    "# 保存模型为PMML格式\n",
    "sklearn2pmml(clf_best_model, pmml_file_path, with_repr=True)\n",
    "\n",
    "# 输出保存成功的信息\n",
    "print(f\"Model saved to {pmml_file_path}\")"
   ],
   "id": "98cb82a44f299060",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model saved to model.pmml\n"
     ]
    }
   ],
   "execution_count": 132
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
